Как установить флаг secure для куки _forum_session

Здравствуйте,
Наш сайт должен работать по протоколам HTTP и HTTPS. Нам необходимо обеспечить безопасность куки (_forum_session). Отсутствует флаг Secure, установлен только HttpOnly. Как добавить флаг Secure?

Спасибо.

Вы должны настроить свой сайт для работы только через HTTPS.

В коде Discourse нет способа внести изменения?

Привет, @mevaha

На протяжении многих лет в веб-разработке сложилась тенденция использовать исключительно HTTPS.

Раньше это было проблемой, пока такие организации, как Let’s Encrypt (LE), не начали бесплатно выдавать SSL-сертификаты и не предоставили надежный механизм для их управления.

При использовании LE (certbot) для настройки сертификатов на вашем сайте автоматически настраиваются как HTTP, так и HTTPS, а весь HTTP-трафик перенаправляется на HTTPS.

Конечно, можно найти способ запустить Discourse только через HTTP, но это не поддерживается, за исключением среды разработки Discourse. Без HTTPS вся информация о входе пользователей, включая пароли, передавалась бы по сети в незашифрованном виде. Это НЕ поддерживается в производственной среде.

Представьте это так: HTTPS — это как использование ремней безопасности в автомобиле. Люди, которые хотят ездить без ремней, делают это на свой страх и риск, поэтому производители автомобилей не выпускают машины без ремней безопасности.

То же самое касается и Discourse. Discourse разработан для безопасной работы в производственной среде, поэтому поддерживаемая версия Discourse в продакшене использует HTTPS.

Надеюсь, это поможет.

Извините, что не смог быть более полезным.

Спасибо @neounix. Наша проблема заключается в том, что SSL-сертификат для HTTPS управляется балансировщиком нагрузки, и между Discourse и балансировщиком нагрузки открыт только порт 80. Мы пытались перенаправить HTTP на HTTPS, но без успеха. Не могли бы вы поделиться со мной конфигурационным файлом куки в Discourse?

Спасибо

Привет, @mevaha!

Если это так, то, скорее всего, перед вашим балансировщиком нагрузки (или в его составе) находится обратный прокси-сервер.

Позвольте объяснить.

Обратный прокси-сервер (вместе с балансировщиком нагрузки, если он у вас есть) взаимодействует с Discourse на бэкенде по протоколу HTTP.

Так что вы правы: Discourse общается только по HTTP, но только с обратным прокси-сервером, а не с внешним миром.

Схема выглядит следующим образом:

ПОЛЬЗОВАТЕЛИ СЕТИ  <-----> HTTPS  <-----> ОБРАТНЫЙ ПРОКСИ-СЕРВЕР <----> HTTP <----> БАЛАНСИРОВЩИК НАГРУЗКИ <----> DISCOURSE (DOCKER)

Таким образом, вы можете открыть контейнер Docker с DISCOURSE на порту 80 (только HTTP), как вы и упоминали.

Однако на стороне, доступной из сети, необходим обратный прокси-сервер, который пересылает запросы HTTPS на бэкенд по протоколу HTTP.

Ваш обратный прокси-сервер (вместе с балансировщиком нагрузки), если он настроен правильно, обеспечит корректную передачу HTTP-куки и заголовков в обоих направлениях.

Надеюсь, это поможет.

Если у вас возникнут дополнительные вопросы, пожалуйста, задавайте их.

Обратите внимание: если вы предоставите точные технические детали вашей архитектуры, нам будет гораздо проще помочь вам, поскольку у нас нет приложения с кристаллическим шаром :slight_smile:

Огромное спасибо @neounix