首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在整个会话中重用CSP脚本吗?

在整个会话中重用CSP脚本吗?
EN

Stack Overflow用户
提问于 2019-05-03 07:51:56
回答 1查看 1.5K关注 0票数 1

这是https://github.com/w3c/webappsec-csp/issues/215的后续行动.阿图鲁亚克建议将讨论移到堆栈溢出。

我们正在为JSF中的脚本实现CSP,并且不知道在整个会话中重用脚本是否安全。或者,就像arturjanc建议的那样,让原始文档将其当前的当前状态发送到生成未来响应的服务器。

假设在整个会话中重用nonce是不安全的,那么只在隐藏的表单输入中包含初始的nonce就可以了,比如当前实现的这里。(暂时忽略CSP头/XSS注入漏洞-它只是一个原型)

@arturjanc:你想再插话吗?

编辑:关于arturjanc回答的其他想法:

请您更详细地介绍一下如何在当今典型的JSF应用程序中实现每个响应的非per,即在开始时只加载一个完整的页面,然后只进行XHR通信?

如果我正确地理解了您,那么您的建议将是始终在每个XHR请求中重新发送最初生成的nonce。然而,在实践中,这实际上是完全相同的,每个会话,不是吗?只是在实现方面比较复杂。

严格地实现每个响应的非per将意味着后续的响应也必须包括在该会话早期创建的所有非per,因此我们将以某种方式跟踪会话中的所有非per。

为每个XHR响应设置新的CSP头,只包含新创建的每个响应当前,可能因为浏览器通过使用交叉策略合并多个CSP头而无法工作,即响应1中的Content-Security-Policy: 'nonce-1'和响应2中的Content-Security-Policy: 'nonce-2'将使响应2之后的两个非new无效。

EN

回答 1

Stack Overflow用户

发布于 2019-05-07 20:36:08

遗憾的是,对于您的问题,没有一个正确的答案:使用每个会话的nonce显然不是错误的,但是它引入了这样的风险:每当攻击者可能泄漏一个nonce时,它就会在另一个页面负载上被重用,从而允许攻击者利用一个XSS错误,否则CSP就会减轻它的漏洞。

具体来说,当您在隐藏的输入字段中包含当前值时,它允许滥用CSS选择器对值进行解压缩;请注意,相同的攻击不会针对script#nonce属性工作,因为浏览器将该属性值隐藏在DOM中以防止此类攻击。

我的建议有两方面:

  • 试着使现在的每个响应,而不是每一次会议。这样,即使现在可以被释放,攻击者将很难重复使用它。
  • 如果您需要重新使用nonce,以允许从服务器异步获取标记来包含具有正确的nonce值的脚本,那么就可以这样做,而不必将nonce复制到DOM中。例如,如果对带有nonce参数的URL使用XHR,则执行类似于xhr.open("/my/url?nonce=" + document.currentScript.nonce)的操作
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55965435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档