【发布时间】:2021-04-20 17:49:19
【问题描述】:
我正在尝试为我的 Web 服务定义 CSP 策略,并正在使用 Scala Play 2.7 中的新功能。
这就是我所做的:
- 在我的 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:"
}
}
- 在 Twirl 模板中,我对 nonce 的引用如下:
<script @{CSPNonce.attr}...</script>
<script @{CSPNonce.attr} ..</script>
几个观察:
- 根据文档,如果我在 application.conf 中打开
csp.header = true,我应该会看到 RequestHeader 中的 nonce 值,它被隐式带入 Twirl 模板。当我打印出标题值时,我根本看不到这个标题。 - 同样,当我在浏览器中查看生成的 HTML 时,我没有在脚本标签中看到 nonce 值。
- 无论我是否在我的内联脚本代码中添加
@{CSPNonce.attr}Twirl sn-p,内联JS 都会被加载。这很奇怪,因为我认为只允许加载标有正确随机数的内联脚本。
那么这里的交易是什么?我没有正确使用此功能吗?
【问题讨论】:
标签: scala playframework