Как защитить приложение Rails от Firesheep?

Мне не удалось найти легкое руководство для обеспечения приложения Ruby on Rails против Firesheep.

Если вы не знаете, Firesheep подключает файлы cookie сеансов, если ваше приложение не принудительно использует SSL и устанавливает безопасный флаг в файле cookie. Мне пришлось кое-что сделать, чтобы найти эти две вещи, поэтому я подумал, что опубликую то, что нашел здесь, и посмотреть, есть ли что-то еще, что мне не хватает.

Шаг 1 Сила SSL

Есть два способа сделать это, что я нашел. Один использует плагин ssl_requirement, но это боль, потому что вам нужно конкретно указать ssl_required :action1, :action2 в каждом контроллере.

Предпочтительным способом является использование промежуточного ПО Rack через этот пост: принудительно использовать SSL с помощью ssl_requirement в приложении Rails 2. Работает как шарм.

Шаг 2 Сделать файлы cookie безопасными

Для этого я следил за этими указаниями, в которых говорится о том, чтобы в файле config/environment/production.rb было указано следующее:

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.
  }

Это все было довольно прямолинейно в моем приложении Rails 2.x. Я что-то пропустил? Разве это для Rails 3?

Ответ 1

Выглядит неплохо. Это довольно похоже на Rails 3, хотя по умолчанию конфигурация сеанса хранится в config/initializers/session_store.rb. Я обычно подстраиваю мое, чтобы посмотреть что-то вроде...

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

И секрет хранится в config/initializers/secret_token.rb:

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

Если у вас есть доступ к вашей конфигурации Apache (или что-то еще), вы также можете принудительно использовать SSL на этом уровне. Поражает меня как более подходящее место для этого, но я думаю, не у всех есть этот вариант.

Ответ 2

Увидев, что эта публикация SO довольно высока в Google, я подумал, что разделю подход, который я использовал для защиты приложения.

Если вы хотите обеспечить SSL и также обеспечить безопасные файлы cookie, вы можете использовать промежуточное ПО Rack:

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

Я оценил множество различных параметров и параметров конфигурации для этого, но промежуточное ПО стойки было похоже на лучший вариант с наименьшим количеством конфигураций - очень простое развертывание. Он имеет несколько отличных конфигурационных параметров для фильтрации определенных правил, хостов, путей и т.д.

Я тестировал, что он действительно устанавливает безопасные файлы cookie правильно, и это происходит. Единственное, что я заметил, это было сделано только при выходе из системы и входе в систему снова, но это использовало Devise.