Подтвердить что ты не робот

Что делает force_ssl в Rails?

В предыдущем question я выяснил, что должен установить nginx ssl term и не иметь Rails обрабатывать зашифрованные данные.

Тогда почему существуют следующие?

config.force_ssl = true

Я вижу, что это прокомментировано в файле конфигурации производства. Но если ожидается, что nginx будет обрабатывать все файлы ssl, чтобы мое приложение rails не занималось зашифрованными данными, то что делает config.force_ssl = true?

Должен ли я оставить его в записях на производстве, если я знаю, что всегда буду использовать nginx?

4b9b3361

Ответ 1

Это не просто заставляет ваш браузер перенаправлять HTTP на HTTPS. Он также устанавливает ваши файлы cookie как "безопасные", и он позволяет HSTS, каждый из которых очень хорош для защиты от SSL зачистки.

Несмотря на то, что HTTPS защищает ваше приложение от https://example.com/yourapp "от атак MITM, если кто-то попадает между вашим клиентом и вашим сервером, они могут вы легко можете посетить" http://example.com/yourapp ". Ни одна из указанных выше защит, ваш браузер с радостью отправит cookie сеанса человеку, выполняющему MITM.

Ответ 2

Настройка config.force_ssl включает ActionDispatch::SSL. Документы ActionDispatch::SSL описывают функциональность следующим образом (добавленные акценты для ясности):

Смотрите здесь здесь и документы для ActionDispatch:: SSL здесь.

DOCS

Это промежуточное программное обеспечение добавляется в стек при 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-only и автоматически перенаправляет запросы без TLS. Включено по умолчанию. Настройте config.ssl_options с помощью hsts: false для отключения. Установите config.ssl_options с помощью hsts: { … }, чтобы настроить HSTS:

    • expires: Как долго, в секундах, эти настройки будут придерживаться. По умолчанию 180.days (рекомендуется). Минимальный размер, необходимый для доступа к браузеру preload lists 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/ } } }

Ответ 3

Этот параметр заставляет HTTPS перенаправлять HTTP-запросы на свои HTTPS-копии. Таким образом, просмотр браузера http://domain.com/path будет перенаправлен на https://domain.com/path.

Завершение оставшегося параметра позволит использовать оба протокола.

Вам все равно нужно настроить ваш веб-сервер для обработки запросов HTTPS.

Ответ 4

Это заставляет зашифровать всю связь с сервером и использовать SSL, то есть через HTTPS.

Когда вы включаете его в контроллер, контроллер будет принимать HTTPS-запросы.

Полезные ссылки: