2010-11-10 26 views
19

Tôi chưa thể tìm thấy hướng dẫn dễ dàng để bảo mật ứng dụng Ruby on Rails với số Firesheep.Làm cách nào để bảo mật ứng dụng Rails chống lại Firesheep?

Trong trường hợp bạn không biết, Firesheep kích hoạt các cookie phiên nếu ứng dụng của bạn không buộc SSL và đặt cờ an toàn trong cookie. Tôi phải làm một số tìm kiếm để tìm thấy hai điều này, vì vậy tôi nghĩ rằng tôi muốn đăng những gì tôi tìm thấy ở đây và xem nếu có bất cứ điều gì khác tôi đang mất tích.

Bước 1 Force SSL

Có hai cách để làm điều này mà tôi tìm thấy. Một người đang sử dụng plugin ssl_requirement, nhưng đây là một nỗi đau vì bạn phải chỉ định cụ thể ssl_required :action1, :action2 trong mọi bộ điều khiển.

Cách thích hợp hơn có vẻ là bằng cách sử dụng Rack Middleware, qua bài đăng này: Force SSL using ssl_requirement in Rails 2 app. Làm việc như một say mê.

Bước 2 Hãy cookie đảm bảo

Đối với điều này tôi theo these directions, mà nói với bạn để đặt sau đây trong config/environment/production.rb tập tin của bạn:

config.action_controller.session = { 
    :key  => 'name_of_session_goes_here', 
    :secret   => 'you need to fill in a fairly long secret here and obviously do not copy paste this one', 
    :expire_after => 14 * 24 * 3600, #I keep folks logged in for two weeks 
    :secure => true #The session will now not be sent or received on HTTP requests. 
    } 

này được tất cả khá thẳng về phía trước on Rails của tôi 2.x ứng dụng. Tôi đã bỏ lỡ bất cứ điều gì? Nó có khác với Rails 3 không?

Trả lời

17

Có vẻ khá tốt với tôi. Nó khá giống với Rails 3, mặc dù cấu hình session được lưu trong config/initializers/session_store.rb. Tôi thường tinh chỉnh của tôi để tìm một cái gì đó giống như ...

MyApp::Application.config.session_store :cookie_store, :key => '_my_app_session', 
                 :secure => Rails.env == 'production', # Only send cookie over SSL when in production mode 
                 :httponly => true, # Don't allow Javascript to access the cookie (mitigates cookie-based XSS exploits) 
                 :expire_after => 60.minutes 

Và bí mật được tổ chức tại config/initializers/secret_token.rb:

MyApp::Application.config.secret_token = 'secret secrets are no fun...' 

Nếu bạn có quyền truy cập vào Apache của bạn (hoặc bất kỳ) cấu hình, bạn cũng có thể buộc sử dụng SSL ở cấp đó. Tấn công tôi như một nơi thích hợp hơn để làm điều đó, nhưng tôi đoán không phải ai cũng có lựa chọn đó.

+0

Cảm ơn bạn đã trả lời. Tôi đang triển khai Heroku để middleware có vẻ là nơi tốt nhất để buộc SSL. –

+3

Lưu ý rằng tùy chọn để làm cho cookie không thể truy cập được với JavaScript là ': httponly' thay vì': http_only'. Sau này đã không được chấp nhận trong Rails 2.3 (hoặc sớm hơn) và loại bỏ trong Rails 3. Tôi tin rằng những thay đổi này là để mang Rails phù hợp với Rack. –

+2

Câu trả lời hay, nhưng việc sử dụng HTTP trong thử nghiệm và HTTPS trong sản xuất giúp bạn dễ dàng bỏ lỡ các vấn đề về nội dung hỗn hợp và các lỗi tinh vi khác. –

1

Thấy bài đăng SO này xếp hạng khá cao trong Google, tôi nghĩ tôi sẽ chia sẻ phương pháp tôi đã sử dụng để bảo mật ứng dụng.

Nếu bạn muốn đảm bảo SSL và cũng đảm bảo các tập tin cookie an toàn thì bạn có thể sử dụng một trung gian rack:

https://github.com/tobmatth/rack-ssl-enforcer

tôi đánh giá nhiều lựa chọn khác nhau và các thiết lập cấu hình để làm việc này nhưng middleware giá có cảm giác như tùy chọn tốt nhất với số lượng cấu hình ít nhất - rất dễ triển khai. Nó có một số tùy chọn cấu hình tuyệt vời để lọc các quy tắc, máy chủ, đường dẫn cụ thể, v.v.

Tôi đã thử nghiệm thực sự đã đặt cookie an toàn đúng cách. Một điều tôi lưu ý là nó chỉ làm điều đó khi đăng xuất và đăng nhập lại - nhưng đó là sử dụng Devise.

Các vấn đề liên quan