2013-05-25 18 views
9

Tôi đã cài đặt phiên bản mới nhất của đá quý Brakeman để giúp tôi với bảo mật ứng dụng Rails.Ruby on Rails 3.2.13 - Brakeman - Bí mật phiên không được bao gồm trong điều khiển phiên bản

Tôi có một số ứng dụng Rails mà tôi có trên hai máy chủ, một cho phát triển và một cho sản xuất. Khi tôi chạy báo cáo Brakeman trên các ứng dụng của tôi, hầu hết trong số họ đã gắn cờ config/initializers/secret_token.rb với lỗ hổng bảo mật cao sau đây.

Session secret should not be included in version control near line 7 

Đây là lần đầu tiên tôi thấy lỗi này kể từ khi tôi chạy phiên bản cũ hơn của Brakeman vài tháng trước.

Từ những gì tôi đã nghiên cứu cho đến nay Rails tự động tạo mã bí mật khi đường ray tên ứng dụng mới được thực thi. Tôi đã không nhận thức được nó cho đến bây giờ. Rõ ràng Rails không bảo vệ tập tin này, nếu tôi quyết định chuyển bất kỳ ứng dụng nào của tôi sang Github thì thông tin sẽ có sẵn cho bất cứ ai tại Github truy cập vào ứng dụng. Tại thời điểm này tôi không tải lên GitHub nhưng tôi muốn thông tin về cách di chuyển secure_token từ config/initializers/secret_token.rb để đóng lỗ hổng bảo mật trong các ứng dụng của tôi.

Một bài đăng trên blog tôi đã đọc đề xuất rằng tôi sẽ chèn mã thông báo bí mật vào biến ENV. Sẽ di chuyển câu lệnh từ config/initializers/secret_token.rb sang config/environment.rb để giải quyết vấn đề? Nếu vậy tôi sẽ thêm nhiệm vụ này vào danh sách nhiệm vụ của tôi trong quá trình phát triển Rails.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

12

Thông điệp cụ thể đó ở Brakeman đã bị tắt tiếng đối với tôi khi tôi đưa thông tin bí mật vào các biến số ENV, như bạn đã đề cập. Cá nhân, tôi thích sử dụng đá quý Figaro cho điều này, nhưng tôi nghĩ rằng dotenv cũng rất phổ biến.

Một số các nguồn lực khác mà bạn có thể quan tâm đến bạn về vấn đề này là:

+1

Đề xuất mà tôi đã đề cập về biến ENV đến từ bài đăng blog Code Climate. Tôi đọc nó trước khi đăng câu hỏi của tôi. Tôi không chắc chắn làm thế nào để biến nó thành biến ENV khi tôi đăng câu hỏi của mình. Tuy nhiên khi tôi nhìn vào môi trường. Tôi đã thấy các định dạng tuyên bố giống nhau. Vì vậy, tôi đã chuyển tuyên bố từ secret_token ở đó. Tin nhắn biến mất. Tôi có bài đăng trên blog Code Climate trong Dấu trang của mình. Tôi sẽ kiểm tra Figaro mà tôi đã thấy trong các tìm kiếm trước đó. Tôi cũng sẽ xem xét dotenv nữa. –

+5

Nếu environment.rb được lưu trữ trong điều khiển nguồn của bạn, thì nó không an toàn hơn secret_token.rb. – Justin

1

Tôi không chắc chắn cách di chuyển bí mật phiên sang tệp khác sẽ tạo sự khác biệt. Về cơ bản, mã bí mật cần được xử lý giống như mật khẩu.

This blog post from Phusion khám phá một vài tùy chọn khác nhau để cung cấp khóa phiên tại thời điểm triển khai.

+0

Tôi đọc đăng trước khi đặt câu hỏi của tôi. Họ đề nghị lựa chọn 2 cùng với Rails vá. Một số tùy chọn cho rằng bạn đang sử dụng Capistrano. Tôi không sử dụng nó. Tôi vẫn đang học về Rails, đặc biệt là về an ninh. Thật không may là bài đăng trên blog có rất nhiều thông tin mà tôi không quen thuộc. –