Zer*_*nel 26 security content-security-policy
目前我正在定义内容安全策略(CSP),如下所示;
Header set Content-Security-Policy: "default-src 'self' data:; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;"
Run Code Online (Sandbox Code Playgroud)
考虑到上面的CSP定义,我对内联JavaScript提出了挑战,因为它可以在任何时候被覆盖.
有什么用的unsafe-inline,如果它几乎不保护?
Ana*_*hat 26
该unsafe-inline选项是移动或当前站点重写内联代码时不立即选项一起使用,但您仍想使用CSP来控制其他方面(如对象-SRC,第三方的预防注射JS等).你是正确的,unsafe-inline它不提供太多的安全性,因为它允许执行不安全的页内脚本和事件处理程序.
谷歌的CSP评估员是一个很好的工具,可以确定你的政策是否强大.
使用该unsafe-inline选项的用例可以在Google 关于内容安全策略的Web开发人员文档中找到:
婚戒讨论论坛管理员希望确保所有资源仅通过安全渠道加载,但实际上并没有编写太多代码; 重写大量的第三方论坛软件,这些软件充满了内联脚本和风格,超出了他的能力范围.以下政策将有效:
Run Code Online (Sandbox Code Playgroud)Content-Security-Policy: default-src https:; script-src https: 'unsafe-inline'; style-src https: 'unsafe-inline'即使
https:指定了default-src,脚本和样式指令也不会自动继承该源.每个指令都完全覆盖该特定类型资源的默认值.
小智 11
虽然我同意它并没有太大的保护,但XSS的经典开发是浏览器开发框架,你在互联网上有一台服务器,当你得到一个XSS漏洞时,你可以访问"http://bad.example.com /hook.js">现在您可以从该服务器控制受害者的浏览器.你告诉它打开一个隐藏的窗口来持久访问,然后你有他们的浏览器的双向通信.
具有"不安全内联"的CSP仍然可能允许所有相同的利用(假设漏洞适合您可以注入的空间),但是连接外部世界接收指令或泄露数据的难度稍大.
这就是说,如果你可以在网页中注入足够复杂的客户端部分,我认为仍然可以通过其他渠道进行大多数相同的攻击.
我的攻击者帽子"自我不安全 - 内联"比没有CSP更难开发.我希望攻击工具能够适应弱的CSP,但这意味着很多常见的漏洞会立即出现,或者更难.