【问题标题】:Correct Way To Use CSP Filter In Play 2.7在 Play 2.7 中使用 CSP 过滤器的正确方法
【发布时间】:2021-04-20 17:49:19
【问题描述】:

我正在尝试为我的 Web 服务定义 CSP 策略,并正在使用 Scala Play 2.7 中的新功能。

这就是我所做的:

  1. 在我的 application.conf 中设置 CSP 指令和 nonce 配置
      csp {
        nonce {
          enabled = true
          pattern = "%CSP_NONCE_PATTERN%"
          header = false
        }

        directives {
          base-uri = "'none'"
          object-src = "'none'"
          script-src = ${play.filters.csp.nonce.pattern} "'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:"
        }
      }
  1. 在 Twirl 模板中,我对 nonce 的引用如下:
<script @{CSPNonce.attr}...</script>

<script @{CSPNonce.attr} ..</script>

几个观察:

  1. 根据文档,如果我在 application.conf 中打开csp.header = true,我应该会看到 RequestHeader 中的 nonce 值,它被隐式带入 Twirl 模板。当我打印出标题值时,我根本看不到这个标题。
  2. 同样,当我在浏览器中查看生成的 HTML 时,我没有在脚本标签中看到 nonce 值。
  3. 无论我是否在我的内联脚本代码中添加@{CSPNonce.attr} Twirl sn-p,内联JS 都会被加载。这很奇怪,因为我认为只允许加载标有正确随机数的内联脚本。

那么这里的交易是什么?我没有正确使用此功能吗?

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    我怀疑你没有启用过滤器。

    请检查您是否已添加

    play.filters.enabled += play.filters.csp.CSPFilter
    

    致您的application.conf

    您还在配置示例中使用csp 而不是play.filters.csp,因此这也可能是一个问题。

    有一个带有 HOCON 设置的测试规范,您可以检查配置。

    https://github.com/playframework/playframework/blob/2.7.x/web/play-filters-helpers/src/test/scala/play/filters/csp/CSPFilterSpec.scala#L69

    【讨论】:

      【解决方案2】:
      1. 我可以确认具有 nonce 功能的 CSP 有效,包括当 CSPFilter 启用且 play.filters.csp.nonce.enabled 为 true 且 play.filters.csp.nonce.header 为 true 时显示为 X-Content-Security-Policy-Nonce 的此标头。此处配置更改后不要忘记重新启动 sbt。

      2. 当您使用 Firefox DOM 检查器(开发人员工具的一部分)检查 html 时,随机数显示为空字符串。您是否尝试过使用右键单击 > 查看源代码来查看 nonce 是否在未处理的原始 html 中?

      3. 在您在 CSP 中指定 nonce 之前,浏览器似乎将所有内容都列入了白名单,可以这样完成:play.filters.csp.directives.script-src = ${play.filters.csp.nonce.pattern} "'self' 'unsafe-inline' 'unsafe-eval'"play.filters.csp.nonce.pattern%CSP_NONCE_PATTERN%

      【讨论】:

        猜你喜欢
        • 2017-09-14
        • 2020-09-24
        • 1970-01-01
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多