В предыдущем вопросе я узнал, что мне нужно установить завершение ssl nginx и не использовать Rails для обработки зашифрованных данных.
Тогда почему существует следующее?
config.force_ssl = true
Я вижу, что это закомментировано в производственном файле конфигурации. Но если ожидается, что nginx будет обрабатывать все ssl-файлы, так что мое приложение rails не работает с зашифрованными данными, тогда что config.force_ssl = true
делать?
Должен ли я оставить его закомментированным в производственной среде, если я знаю, что всегда буду использовать nginx?
источник
force_ssl
свойство для каждого контроллера .force_ssl
Переменной конфигурации, которая устанавливаетRack::SSL
промежуточное программное обеспечение , которая действительно позволяет HSTS по умолчанию .config.force_ssl = true
должно быть по умолчанию, почему команда rails закомментировала его по умолчанию?Настройка
config.force_ssl
включаетActionDispatch::SSL
. ВActionDispatch::SSL
документах описывают функциональность следующим образом (курсив добавлен для ясности):ДОКУМЕНТЫ
Это промежуточное ПО добавляется в стек, когда
config.force_ssl = true
ему передаются заданные параметрыconfig.ssl_options
. Он выполняет три задачи по обеспечению безопасности HTTP-запросов:Перенаправление TLS: постоянно перенаправляет запросы http: // на https: // с тем же хостом URL, путем и т. Д. Включено по умолчанию. Установите,
config.ssl_options
чтобы изменить целевой URL (напримерredirect: { host: "secure.widgets.com", port: 8080 }
), илиredirect: false
отключите эту функцию.Безопасные файлы cookie: устанавливает
secure
флаг для файлов cookie, чтобы сообщить браузерам, что они не должны отправляться вместе с http: // запросами. Включено по умолчанию. Установитеconfig.ssl_options
с,secure_cookies: false
чтобы отключить эту функцию.HTTP Strict Transport Security (HSTS): указывает браузеру запомнить этот сайт только как TLS и автоматически перенаправлять запросы, отличные от TLS . Включено по умолчанию. Настройте
config.ssl_options
с помощью,hsts: false
чтобы отключить. Установитеconfig.ssl_options
с помощьюhsts: { … }
для настройки HSTS:expires
: Как долго (в секундах) будут сохраняться эти настройки. По умолчанию180.days
(рекомендуется). Минимум, необходимый для участия в списках предварительной загрузки браузера, составляет18.weeks
.subdomains
: Установите, чтобыtrue
указать браузеру применить эти настройки ко всем поддоменам. Это защищает ваши файлы cookie от перехвата уязвимым сайтом в субдомене. По умолчаниюtrue
.preload
: Сообщите, что этот сайт может быть включен в предварительно загруженные списки HSTS браузеров. HSTS защищает ваш сайт при каждом посещении, кроме первого, поскольку он еще не видел ваш заголовок HSTS. Чтобы восполнить этот пробел, поставщики браузеров включают встроенный список сайтов с поддержкой HSTS. Перейдите на https://hstspreload.appspot.com, чтобы отправить свой сайт на включение. Чтобы отключить HSTS, недостаточно просто пропустить заголовок. Браузеры будут помнить исходную директиву HSTS до истечения срока ее действия. Вместо этого используйте заголовок, чтобы указать браузерам немедленно прекратить действие HSTS. Настройкаhsts: false
- это ярлык дляhsts: { expires: 0 }
.Запросы могут отказаться от перенаправления с помощью
exclude
:config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }
источник
exclude
» - Предупреждение: эта функция была добавлена недавно в Rails 5, поэтому не будет работать для тех из нас, кто использует Rails 4.2 или нижеexclude
глобальные параметры были доступны задолго до Rails 5, поэтому синтаксис немного отличается:config.ssl_options = { exclude: proc { |env| env['PATH_INFO'].start_with?('/healthcheck/') } }
- serverfault.com/a/517401Этот параметр заставляет HTTPS, перенаправляя HTTP-запросы их аналогам HTTPS. Таким образом, посещение браузера
http://domain.com/path
будет перенаправлено наhttps://domain.com/path
.Если оставить этот параметр закомментированным, оба протокола будут разрешены.
Вам все равно нужно настроить веб-сервер для обработки запросов HTTPS.
источник
redirect 301 https:...
), не будет ли ВСЕ проходить через https, поэтому наconfig.force_ssl = true
самом деле ничего не будет делать (поскольку ничто никогда не будет http)? Или здесь есть более глубокая причина безопасности?config.force_ssl
включенным, на всякий случай, если кто-то удалит перенаправление из конфигурации веб-сервера.config.force_ssl
иadd_header Strict-Transport-Security max-age=...;
приведет к 2Strict-Transport-Security
заголовкамОн заставляет всю связь с сервером быть зашифрованной и использовать SSL, то есть через HTTPS.
Когда вы включаете его в контроллер, этот контроллер будет принимать только запросы HTTPS.
Полезные ссылки:
источник