我想用内容安全政策对于我基于 JSF 2.1 的 Web 项目,我认为它可以显着提高对 XSS 攻击的防护。
由于 CSP 的默认行为阻止所有内联 JavaScript它基本上破坏了 JSF 的
<f:ajax execute="input" render="output" />
功能。这是因为 JSF 在使用上述构造时会生成大量内联 JavaScript 代码。
有谁知道是否有办法在基于 JSF 的项目中使用 CSPf:ajax无需使用以下 CSP 指令来允许内联 JS:
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'
我知道手动将所有 JavaScript 放在单独的文件中是可能的,但这样做我将被迫手动执行所有 Ajax 操作。
您可以避免使用unsafe-inline
源表达式以便将内联列入白名单<script>
s,通过利用nonce and/or hash反而 [1]。这样做需要:
-
包含一个nonce
内联属性<script>
元素,例如
<f:ajax ... pt:nonce="$placeHolder" />
(假设pt
前缀已绑定到http://xmlns.jcp.org/jsf/passthrough
命名空间)。该属性的值可以只是视图文件中的占位符,使您能够在所有受信任的内联中集体替换它<script>
稍后。
-
更换(通过Filter
例如)在每个响应中使用随机值的占位符,并将该值插入到 CSP HTTP 标头和/或等效项中<meta>
元素,例如生产
<script ... nonce="126cfb...">
and
Content-Security-Policy: default-src 'self'; ... script-src 'self' 'nonce-126cfb...'
.
理论上,产生随机数值s 也应该存储在服务器上,以避免在不久的将来重新分配它们,因为它们应该是unique.
-
另外或替代地,插入每个可信内联<script>
内容'digest进入 CSP HTTP 标头和/或同等内容<meta>
元素及其各自的哈希算法, 例如
Content-Security-Policy: script-src 'sha256-126cfb...='
.
哈希值我想,在准备每个响应时也应该重新生成 s ,因为<script>
通常预计会随着时间的推移而发生变化,而对于 JSF,您可能不会立即注意到它们发生变化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)