NoScript如何阻止内联脚本?

时间:2018-05-12 20:44:29

标签: google-chrome firefox-webextensions noscript

JavaScript阻止扩展如NoScript / ScriptSafe如何阻止内联脚本?对于阻止对远程脚本的请求(即<script src="http://example.com/index.js"></script>),我可以使用webRequest API [1]。但这不适用于内联脚本。

我假设我可以走dom并删除或以某种方式暂时禁用没有<script>属性的src块,可能通过重命名该元素。我试图深入研究NoScript源代码并发现它具有"run_at": "document_start"设置的内容脚本,这使得它在加载DOM并运行脚本之前运行。

此外,扩展如何防止允许的脚本在页面加载后1分钟注入<script>标记并src指向阻止另一个域的情况?

[1] https://developer.chrome.com/extensions/webRequest

1 个答案:

答案 0 :(得分:1)

在ScriptSafe来源中找到答案:

browser.webRequest.onHeadersReceived.addListener(
    response => {
        if (true) { // TODO check whether to block inline scripts for this HTML
            response.responseHeaders.push({
                'name': 'Content-Security-Policy',
                'value': "script-src 'none'"
            });
        }
        return response;
    }
    ,
    {
        'types': [ 'main_frame', 'sub_frame' ],
        'urls': [ '<all_urls>' ]
    },
    [
        'responseHeaders',
        'blocking'
    ]
);

重要的是添加一个Content-Security-Policy标头,其值为script-src 'none',这将阻止执行内联JavaScript。这也会阻止所有远程脚本。见[1]以供参考。

[1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src