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
指向阻止另一个域的情况?
答案 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