12/08/2018, 16:36

Rails và những vấn đề bảo mật.

Ruby on rails đã và đang ngày càng được sử dụng rộng rãi, là một ngôn ngữ linh hoạt, ngắn gọn, dễ học cho các lập trình viên.Nhưng cũng như bất kỳ nền tảng nào khác, Ruby on rails cũng không phải là một nền tảng bảo mật hoàn toàn.Vẫn có những vấn đề về bảo mật mà khi chúng ta làm việc với ngôn ngữ ...

Ruby on rails đã và đang ngày càng được sử dụng rộng rãi, là một ngôn ngữ linh hoạt, ngắn gọn, dễ học cho các lập trình viên.Nhưng cũng như bất kỳ nền tảng nào khác, Ruby on rails cũng không phải là một nền tảng bảo mật hoàn toàn.Vẫn có những vấn đề về bảo mật mà khi chúng ta làm việc với ngôn ngữ này cần lưu ý, hiểu về nó.Sau đây hãy tìm hiểu một vài vấn đề như vậy:

Mass Assignment

Mass assignment gán biến tùy tiên, nghĩa là hacker cố gắng cập nhật nhiều trường trong database cùng lúc, bao gồm những trường không được phép sửa với quyền của một người dùng bình thường. Ví dụ ta có:

<%= form_for @user do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>
 
  <%= f.label :surname %>
  <%= f.text_field :surname %>
 
  <%= f.submit %>
<% end %>

Và trong controller:

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    redirect_to some_path
  else
    render :edit
  end
end

Nhìn qua rất hợp lý, nhưng thực sự đó là một lỗ hổng bảo mật lớn. Nếu bảng user có cột admin, một kẻ xâm nhập có thể dễ dàng chỉnh sửa. Chỉ cần thêm một trường ẩn trong form với:

<input type="hidden" name="user[admin]" value="true">

Vâng, bạn có thể đoán điều gì sẽ xảy ra, hacker giờ có quyền một admin, bởi vì chúng ta cho phép điều đó xảy ra. Thật tệ, điều đó giải thích tại sao các tham số chắc chắn (strong parameters) được giới thiệu ngay từ đầu của Rails core version 4. Với strong parameters, bạn cung cấp một danh sách các thuộc tính được cho phép thay đổi bởi user.Bạn có thể tìm hiểu hơn về Strong parameters.

Revealing Private Tokens

Ứng dụng của bạn sử dụng một danh sách các token cá nhân để tương tác với bên thứ 3 hay cho phép xác thực OAuth2 chẳng hạn. Hãy luôn cẩn thận với các token này và đừng bao giờ để lộ chúng ra ngoài (trong một repo public của GitHub). Cách đơn giản nhất là tách chúng ra thành các biến môi trường và sử dụng gem như dotenv-rails. Với dotenv-rails, bạn tạo một file là .env và loại bỏ file đó khỏi bộ điều khiển version (git). và đặt các token vào file: Trên production, các biến này luôn được đặt trong file cấu hình server. Trong các phiên bản cũ của Rails, một token bí mật được nằm trong config/initializers/secret_token.rb, nhưng cũng không đảm bảo an toàn cho mọi case. Rails 4 đã giới thiệu một file đặc biệt config/secrets.yml với các token production được cấu hình để sử dụng một biến ENV.

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

Và đừng quên đặt secret_key_base vào trong biến môi trường, và đừng đặt key với giá trị đơn giản – chạy lênh rake secret và sử dụng giá trị được sinh ra.

Logging Private Data

Rails app log lại tất cả các tương tác của bạn và đó là một điều tất. Tuy nhiên, một vài thông tin cá nhân cũng có thể bị ghi lại, và trở thành món ngon cho ai đó có thể truy cập vào server. Ví dụ dữ liệu chứa mật khẩu user, số thẻ tin dụng, .. Trong Rails có setting Rails.application.config.filter_parameters được định nghĩa trong file config/initializers/filter_parameter_logging.rb. Ban đầu, nó trông như:

	Rails.application.config.filter_parameters += [:password]

Tuy nhiên, hãy đảm bảo cập nhật file này nếu ứng dụng của bạn làm việc với các dữ liệu nhạy cảm

Uploading Executable Files

Rất nhiều ứng dụng cho phép user tải lên các file, ví dụ hình ảnh hay file văn bản. Khi đó, cần phải kiểm tra kỹ kích thước file và cực kỳ cẩn thận với các file thực thi và scripts.

Một hacker có thể cố gắng tải một file chứa mã độc lên server của bạn và có thể tự động thực thi, điều đó có thể dẫn đến rất nhiều vấn đề nghiêm trọng. Ví dụ khi tải các file được đặt trong folder public, nhưng lại cũng được cài đặt như thư mục Apache root.

Có nhiều giải pháp như Paperclip, Carrierwave, Dragonfly, và các công cụ khác, bạn nên kiểm tra kỹ tài liệu khi thực hiện chức năng upload file để lựa chọn cho đúng.

0