Не удается увидеть параметр строгой транспортной безопасности в ответе HEADERS в почтальоне?

Я пытаюсь внедрить HSTS в типобезопасный сервер play framework, используя код Scala.

Я обновил файл application.config следующей строкой:

 play.filters.enabled += "play.filters.headers.SecurityHeadersFilter"
 play.filters.headers.frameOptions = "DENY"
 play.filters.https.strictTransportSecurity="max-age=31536000;includeSubDomains; preload"

Итак, после добавления этого, когда я выполняю URL-адрес: https://www.mywebsite.com в почтальоне, в столбец заголовков, который я ожидаю увидеть:

 content-length: 85
 content-type: text/html; charset=utf-8
 request-time: 2
 x-frame-options: DENY
 strict-transport-security: max-age=15552000; preload

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

Помимо приведенной выше строки кода, я даже добавил эту строку кода в app.config:

    https {
     strictTransportSecurity = "max-age=31536000; includeSubDomains"
     redirectStatusCode = 308
      }

Но эти изменения также не влияют на заголовки ответов.

Короче говоря, я ожидаю, что если я использую curl в git bash для своего сайта, я увижу то же самое, что и для Facebook:

 curl --head https://www.facebook.com
 x-frame-options: DENY
 strict-transport-security: max-age=15552000; preload
 x-content-type-options: nosniff

То же самое для моего URL, когда я помещаю https://www.mywebsite.com, мне нужно увидеть:

     strict-transport-security: max-age=15552000; preload

в столбце ответов заголовков, но я этого не вижу.

Может ли кто-нибудь указать, где я ошибаюсь в этом. Я новичок в HSTS и Scala, а также в задачах безопасности.

Я попытался добавить в файл App.config

  play.filters.enabled += "play.filters.https.RedirectHttpsFilter"
  play.filters.https.redirectEnabled = true
  play.filters.enabled += "play.filters.headers.SecurityHeadersFilter"
  play.http.forwarded.trustedProxies=["0.0.0.0/0", "::/0"]
  play.filters.https.strictTransportSecurity = "max-age=31536000; 
  includeSubDomains; preload"
  play.filters.https.redirectStatusCode = 301

Но не приходит ответ заголовков. Где еще я должен изменить код в playframework, чтобы отображать его в заголовках.


person AKDGP    schedule 19.03.2018    source источник
comment
@users, кто-нибудь, пожалуйста, помогите мне с этим   -  person AKDGP    schedule 19.03.2018
comment
Ваш вопрос нуждается в доработке. Ваш блок кода плохо отформатирован, включает новые строки, которые могут быть или не быть в реальной конфигурации, включает нерелевантную информацию (вся часть местоположения), включает два разных заголовка Strict-Transport-Security (один с точкой с запятой - один без) затем говорит, что вы видите только какой-то неформатированный вывод почтальона, не говоря, что вы сделали для этого, а затем аналогичный несвязанный, неформатированный вывод curl. Ваш базовый синтаксис для add_header выглядит примерно правильно, но я понятия не имею о вашей настройке, почему это связано со Scala или AWS или почему вы думаете, что это не работает, поэтому не могу помочь.   -  person Barry Pollard    schedule 19.03.2018
comment
@BarryPollard, спасибо за ваши комментарии.!!! Теперь я отредактировал проблему, с которой столкнулся, не могли бы вы помочь мне здесь.   -  person AKDGP    schedule 19.03.2018


Ответы (1)


Я не знаю ни Scala, ни playframework, но из беглого гугла мне кажется, что strictTransportSecurity не является частью SecurityHeadersFilter, но часть RedirectHttpsFilter.

Так нужно ли включать этот фильтр?

play.filters.enabled += play.filters.https.RedirectHttpsFilter

И обратите внимание также на этот комментарий:

По умолчанию перенаправление происходит только в режиме Prod. Чтобы переопределить это, установите

play.filters.https.redirectEnabled = true.

Имейте в виду, что HSTS может сломать ваш сайт, если у вас есть ЛЮБАЯ необходимость в открытом тексте HTTP — например, субдомен, который вы еще не перевели на HTTPS (например, blog.example.com), или внутренние сайты, использующие тот же домен (intranet.example.com). ). Сначала установите НИЗКИЙ max-age и увеличьте его, когда докажете, что это не является причиной и проблемой, пожалуйста, не используйте includeSubDomains изначально и очень, очень используйте не включайте preload, пока не будете готовы к этому (лично я думаю, что очень немногие сайты вообще должны устанавливать это). Я записал в блог об опасностях их включения, когда люди не полностью понимают эти и, не обижая вас, если вы изо всех сил пытаетесь просто включить их, я бы определенно причислил вас к этому лагерю!

person Barry Pollard    schedule 19.03.2018
comment
Тогда почему вы приняли ответ? В любом случае, вы делаете этот запрос через HTTPS или через HTTP? - person Barry Pollard; 19.03.2018
comment
Хорошо, потому что HSTS не следует отправлять по HTTP, поэтому я подумал, что это может быть так. У меня заканчиваются идеи. Основываясь на ограниченной информации, которую вы предоставили, она должна работать, но, честно говоря, я немного слеп. Какую версию Playframework вы используете? И что-нибудь в логах ошибок? И вы подключаетесь напрямую к Scala или через какой-то другой веб-сервер? Может попробовать подключиться напрямую? - person Barry Pollard; 19.03.2018
comment
HSTS не устанавливается только для ответа HTTPS. Вы точно подключаетесь к серверу scala по HTTPS? Если нет, то это может объяснить, почему вы не видите этот заголовок, который включает в себя при подключении через прокси-сервер через Nginx — этот прокси-проход должен быть установлен на HTTPS. Также в дополнение к перенаправлению следует использовать HSTS (stackoverflow.com/questions/37767031/). Почему вы заблокировали доступ по HTTP? Как вы думаете, какой цели это служит? - person Barry Pollard; 26.03.2018
comment
Так по HTTP? Я не должен отправлять заголовок через HTTP только через HTTPS. - person Barry Pollard; 27.03.2018
comment
Ну, я предполагаю, что как только вы сделаете вызов через HTTPS, заголовок начнет заполняться. Я предполагаю, что playframework намеренно не включает его через HTTP (как и должно быть). Но не используйте игровую инфраструктуру, поэтому я предполагаю, что здесь. Если вы спрашиваете, как включить HTTPS в playframework, то это другой вопрос, с которым я, к сожалению, не могу вам помочь. - person Barry Pollard; 27.03.2018
comment
СЕЙЧАС только я обнаружил, что, поскольку я использую версию игры 2.3.6, и HSTS не поддерживается для этой ВЕРСИИ. Можете ли вы предложить мне свои идеи здесь? Я не могу обновить свой код до 2.6.x, так как нужно внести много изменений. - person AKDGP; 28.03.2018
comment
Это просто заголовок HTTP. Если у вас есть возможность добавить их (либо в игре, либо в nginx), вы можете добавить HSTS. Защита для HSTS (и многих других заголовков безопасности) находится на стороне клиента, и они ничего не делают на стороне сервера (кроме добавления заголовка, чтобы сообщить клиенту о необходимости его включения). - person Barry Pollard; 28.03.2018