在做渗透测试时,给网站加了CSP策略禁止内联脚本,但测试人员用base64编码的dataURI依然能执行恶意脚本,这是怎么回事?
我的CSP配置是这样的:Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com,但测试用还是能弹窗。
已经尝试过加script-src 'unsafe-inline'黑名单,也用了nonce验证,但客户环境要求兼容旧版IE,这该怎么彻底堵住dataURI执行漏洞?
data:到你的策略里:不过老版IE根本不支持CSP,建议用X-Content-Security-Policy兼容一下,但真想彻底堵住还是得放弃IE。
首先,你的配置里没有明确禁止data:协议,这是一大漏洞。攻击者可以用
data:text/javascript;base64,...这种方式直接绕过。解决方法是在CSP里加一行:block-all-mixed-content,同时明确拒绝data:协议:script-src 'self' https://cdn.example.com; block-all-mixed-content;其次,关于旧版IE兼容问题,确实是个麻烦事。IE11以下根本不支持CSP Level 2,nonce和hash都玩不转。建议用
X-Content-Security-Policy头专门给IE用,内容和普通CSP一样,至少能挡住一部分攻击。最后提醒一句,别迷信CSP能完全防住XSS,它只是多加一层防护。输入验证和输出编码才是根本,这两个做好了,CSP只是锦上添花。
给你一个完整配置参考:
记住,安全这事永远是层层设防,不要把所有希望都寄托在一个策略上。