捕获内容安全策略指令违规

时间:2021-05-07 20:58:54

标签: javascript content-security-policy

内容安全策略指令可以确保其他域的脚本无法被注入。

鉴于我想注入一个脚本,例如一个书签,其中 CSP 禁止,
我如何拦截违规行为,例如在控制台中打印一条消息或使用 alert

我尝试了以下失败

+function () {
    try {
        var url = "http://another.domain/myscript.js",
            script = document.createElement('script');
        script.onload = function () {
            // whatever
        };
        script.setAttribute('src', url);
        document.getElementsByTagName('head').item(0).appendChild(script);
    } catch (e) {
        alert('Can\'t inject script, most likely due to Content-Security-Policy')
    }
}();

1 个答案:

答案 0 :(得分:1)

您可以使用自 CSP2 起提供的 SecurityPolicyViolationEvent inretface:

if ('SecurityPolicyViolationEvent' in window) { // Check browser support
  window.addEventListener('securitypolicyviolation', function(e) {
    console.log( e.violatedDirective, e.originalPolicy );
    });
  }

simplest example 它是如何工作的。