如何绕过HTML meta标签设置的Content-Security-Policy?
我在测试一款调用第三方脚本的本地脚本(用于测试SAAS应用),但因我的域名不在指令列表中,被Content-Security-Policy(CSP)策略拦截。该CSP由带有http-equiv="Content-Security-Policy"的HTML meta标签设置,我尝试过多个扩展程序但均失败,请问如何绕过这些策略?
示例Meta标签如下:
<meta http-equiv="Content-Security-Policy" content=" script-src 'self' 'unsafe-eval' 'unsafe-inline' *.braintreegateway.com *.paypalobjects.com *.paypal.com *.googlecommerce.com https://*.screenpopper.com screenpopper.com *.google.com *.facebook.com *.facebook.net *.bing.com *.criteo.net *.google-analytics.com https://*.acsbap.com *.doubleclick.net *.criteo.com *.nr-data.net https://cdn.ywxi.net *.mcafeesecure.com *.googleapis.com *.klevu.com https://static.klaviyo.com/ https://static-tracking.klaviyo.com/ https://*.gorgias.chat/ https://polyfill.io/ *.gstatic.com *.youtube.com *.emailage.com *.googleadservices.com *.googletagmanager.com *.oraclecloud.com *.trustlogo.com *.trustedsite.com https://www.clickcease.com secure.comodo.com *.criteo.com *.bbb.org *.newrelic.com *.callrail.com https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/ https://*.amazon.com https://static-na.payments-amazon.com https://*.amazonpay.com *.rtb123.com https://*.cloudfront.net https://widget.trustpilot.com https://*.getbread.com https://*.digicert.com https://*.inspectlet.com https://*.fontawesome.com; form-action 'self' *.paypal.com sandbox.paypal.com https://*.amazon.com https://cdn.ywxi.net *.facebook.com; frame-src 'self' *.google.com https://*.accessibe.com *.facebook.com *.paypalobjects.com https://acsbapp.com https://*.acsbapp.com https://acsbap.com https://player.vimeo.com/ *.braintreegateway.com https://widget.trustpilot.com https://*.paypal.com/ *.trustedsite.com https://cdn.ywxi.net https://bid.g.doubleclick.net https://www.sandbox.paypal.com/ https://www.youtube.com/ *.amazon.com *.getbread.com *.payments-amazon.com ;">
针对meta标签设置的CSP,你可以尝试以下几种仅用于测试的绕过方式:
直接修改本地HTML文件
如果是本地加载的HTML文件,直接找到对应的<meta>标签,要么删除整个标签,要么在script-src规则里添加你的测试域名(比如localhost或自定义本地域名),保存后重新加载页面即可。用浏览器调试工具临时移除CSP标签
打开浏览器开发者工具(快捷键F12),切换到Elements面板,找到那个包含CSP的meta标签,右键选择删除。页面无需刷新,后续加载的脚本就不会受该CSP限制,但每次刷新页面都需要重复操作。通过本地代理修改页面响应
用Charles、mitmproxy这类本地代理工具,拦截目标页面的HTTP响应,把包含CSP的meta标签删除,或者修改script-src规则添加上你的测试域名。这种方式适合无法直接修改HTML文件的场景,设置一次后后续访问都会自动生效。通过浏览器启动参数全局禁用CSP
不同浏览器支持通过启动参数关闭CSP:- Chrome/Edge:修改浏览器快捷方式的目标路径,在末尾添加
--disable-content-security-policy(注意前面有空格),启动后所有页面的CSP都会被禁用。 - Firefox:在地址栏输入
about:config,搜索security.csp.enable,将其值改为false即可。
- Chrome/Edge:修改浏览器快捷方式的目标路径,在末尾添加
重要提醒:以上方法仅适用于本地测试场景,绝对不要在生产环境或访问非信任网站时使用。CSP是网站的核心安全防护机制,禁用或绕过会大幅提升被攻击的风险。
内容的提问来源于stack exchange,提问作者Tormod Smith

