t3c*_*ris 5 jsf web content-security-policy
我想对基于JSF 2.1的Web项目使用“ 内容安全策略”,因为我认为它可以显着提高对XSS攻击的防护。
由于CSP的默认行为是阻止所有内联JavaScript,因此它基本上破坏了JSF
<f:ajax execute="input" render="output" />
Run Code Online (Sandbox Code Playgroud)
功能。这是因为当使用上述结构时,JSF会生成许多内联JavaScript代码。
有谁知道,如果有一种方法可以在JSF使用CSP基础的项目,其使用的F:AJAX,而不需要让JS在线使用下列CSP指令:
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'
Run Code Online (Sandbox Code Playgroud)
我知道可以将所有JavaScript手动放置在单独的文件中,但是这样做将被迫手动完成所有Ajax的工作。
您可以通过使用随机数和/或散列unsafe-inline来避免使用源表达式将内联列入白名单 [ 1 ]。这样做需要:<script>
nonce在内联元素中包含属性<script>,例如
<f:ajax ... pt:nonce="$placeHolder" />
(假设pt前缀已绑定到http://xmlns.jcp.org/jsf/passthrough命名空间)。该属性的值可以只是视图文件中的占位符,使您能够<script>稍后在所有受信任的内联中集体替换它。
在每个响应中用随机值替换(Filter例如通过 )占位符,并将该值插入到 CSP HTTP 标头和/或等效<meta>元素中,例如生成
<script ... nonce="126cfb...">和
Content-Security-Policy: default-src 'self'; ... script-src 'self' 'nonce-126cfb...'。
理论上,生成的随机数值也应该存储在服务器上,以避免在不久的将来重新分配它们,因为它们应该是唯一的。
另外或替代地,将每个可信内联<script>内容的摘要插入到 CSP HTTP 标头和/或等效<meta>元素中,以及其各自的哈希算法,例如
Content-Security-Policy: script-src 'sha256-126cfb...='。
我猜想,在准备每个响应时, hash-value也应该重新生成,因为<script>通常预计 s 会随着时间的推移而变化,而使用 JSF,您可能不会立即注意到它们何时变化。
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |