【问题标题】:How does NoScript block inline scripts?NoScript 如何阻止内联脚本?
【发布时间】:2018-10-22 22:41:10
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: google-chrome firefox-addon-webextensions noscript


    【解决方案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'
        ]
    );
    

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-22
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多