安全问题,我想避免通过chrome内容脚本注入代码,如何检测是否是这种情况?
假设:
内容脚本是恶意代码,因此它可能会避免消息传递响应。
据我所知,这是不可能的。
根据执行环境,
- 他们
内容脚本在称为隔离世界的特殊环境中执行
可以访问他们被注入的页面的 DOM,但不能访问页面创建的任何 JavaScript 变量或函数。
在页面上运行的 JavaScript 不能调用任何函数或访问内容脚本定义的任何变量。
我相信#3告诉我们,如果扩展不受我们的控制,我们不知道是否有一些内容脚本正在运行。
内容脚本可以访问相同的 DOM,但在隔离的环境中运行,这意味着它们无法访问/更改您的 JavaScript,但可以更改您的 DOM。
如果你想检测一个内容脚本改变了你的 DOM,你可以使用 MutationObserver 监听 DOM 的变化。如果你自己不改变 DOM(例如使用 React ),你可以听任何更改。
您可以尝试将这样的脚本添加到您自己的浏览器中,看看它是如何显示的。如果它确实出现在渲染的HTML中,那么也许可以用JavaScript检测到它:
$('script').filter(function () {
var src = $(this).attr('src'),
result,
externalScripts = [];
if(src !== undefined){
//check for scripts which are not served from your domain
//you could also try just returning the scripts which have no src attribute
result = src.match(/^(?:https?:)//expected.domain.com/);
if(result === null) {
externalScripts.push(src);
}
}
return externalScripts;
})
但很可能无法检测到,因为听起来 Chrome 脚本是沙盒化的。找出如何防止一件事的最好方法是尝试自己做这件事,看看它如何影响页面。
您还应该问问自己是否真的有必要防止这种情况。这似乎不太可能是安全风险。