Как обезопасить приложение Rails от Firesheep? - PullRequest
19 голосов
/ 10 ноября 2010

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

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

Шаг 1 ForceSSL

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

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

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

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

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?

Ответы [ 2 ]

17 голосов
/ 10 ноября 2010

выглядит довольно хорошо для меня. Это похоже на 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 на этом уровне. Мне кажется, это более подходящее место, но я думаю, что не у всех есть такая возможность.

1 голос
/ 02 февраля 2014

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...