【问题标题】:Unable to see strict-transport-security parameter in HEADERS response in postman?无法在邮递员的 HEADERS 响应中看到 strict-transport-security 参数?
【发布时间】:2018-03-19 06:41:54
【问题描述】:

我正在尝试使用 Scala 代码在 Play 框架类型安全服务器中实现 HSTS。

我已使用以下行更新了 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

这些内容长度、类型和时间已经到来,但是这些严格的传输参数并没有反映在 postman 中的 headers 响应中,因为配置文件中的代码更改。

除了上面这行代码,我什至还在 app.config 中添加了这行代码:

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

但这些更改对响应标头也没有影响。

简而言之,我期望的是,如果我在 git bash 中为我的网站使用 curl,我会看到与我在 Facebook 中看到的相似:

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

当我输入 https://www.mywebsite.com 时,我的 URL 的方式相同,我需要查看:

     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 中的代码以将其显示在标题中。

【问题讨论】:

  • @users 谁能帮我解决这个问题
  • 您的问题需要改进。您的代码块格式错误,包括可能在或可能不在实际配置中的换行符,包括不相关的信息(整个位置部分),包括两个不同的 Strict-Transport-Security 标头(一个带有分号 - 一个没有)然后说你只看到一些未格式化的邮递员输出,而没有说明你做了什么来得到它,然后是类似的不相关的、未格式化的 curl 输出。您的 add_header 的基本语法看起来不错,但我不知道您的设置,为什么这与 Scala 或 AWS 有关,或者为什么您认为这不起作用,所以无能为力。
  • @BarryPollard,感谢您的 cmets。!!!现在我已经编辑了我面临的问题,你能帮我看看吗?

标签: scala amazon-web-services ssl nginx hsts


【解决方案1】:

我不知道 Scala 或 playframework,但从快速的 Google 来看,在我看来 strictTransportSecurity 不是SecurityHeadersFilter 的一部分,而是part of RedirectHttpsFilter

那么你需要包含这个过滤器吗?

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

还要注意这条评论:

默认情况下,重定向仅在 Prod 模式下发生。要覆盖它,请设置

play.filters.https.redirectEnabled = true.

请注意,如果您对纯文本 HTTP 有任何需求,HSTS 可能会破坏您的网站 - 例如您尚未迁移到 HTTPS 的子域(例如 blog.example.com),或使用相同域的内部站点(intranet.示例.com)。请先将其设置为 LOW max-age,并在您证明它不是导致和问题时建立它,请不要最初使用 includeSubDomains,真的,真的不要包含preload,直到你准备好(我个人认为很少有网站应该设置这个)。我有blogged about the dangers of switching these on when people do not fully understand these,而且,不冒犯你,如果你只是为了打开这些而苦苦挣扎,那么我现在肯定会把你算在那个阵营里!

【讨论】:

  • 那你为什么接受这个答案?无论如何,您是通过 HTTPS 还是通过 HTTP 发出此请求?
  • 好的,因为 HSTS 不应该通过 HTTP 发送,所以认为可能是这样。我的想法不多了。根据您提供的有限信息,它应该可以正常工作,但老实说,这里有点盲目。您使用的是哪个版本的 Playframework?以及错误日志中的任何内容?您是直接连接到 Scala 还是通过其他 Web 服务器?可以试试直接连接吗?
  • 仅在 HTTPS 响应上未设置 HSTS。您确定使用 HTTPS 连接到 scala 服务器吗?如果不是,那么这可能解释了为什么您没有看到此标头,这包括通过 Nginx 通过代理传递连接时 - 此代理传递必须设置为 HTTPS。除了重定向 (stackoverflow.com/questions/37767031/…) 之外,还应使用 HSTS。为什么要阻止 HTTP 访问?您认为这样做有什么目的?
  • 那么通过HTTP?我不应该只通过 HTTPS 通过 HTTP 发送标头。
  • 好吧,我假设一旦您通过 HTTPS 进行调用,标头就会开始填充。我猜测 playframework 故意不通过 HTTP 包含它(应该如此)。但是不要使用播放框架,所以我在这里猜测。如果您问如何在 playframework 中启用 HTTPS,那么这是一个不同的问题,很遗憾,我无法为您提供帮助。
猜你喜欢
  • 2019-03-07
  • 2018-04-05
  • 2018-06-03
  • 1970-01-01
  • 2015-04-06
  • 2016-07-12
  • 2019-04-01
  • 2018-03-26
  • 1970-01-01
相关资源
最近更新 更多