如何检测是否在我的页面中注入了不需要的chrome内容脚本?

时间:2016-07-04 23:02:57

标签: javascript security google-chrome-extension code-injection content-script

这是一个安全问题,我想避免通过chrome内容脚本注入代码,如何检测是否是这种情况?

假设:

content-script是恶意代码,因此它可能会避免消息传递响应。

3 个答案:

答案 0 :(得分:4)

据我所知,这是不可能的。

根据Execution environment

  
      
  1. 内容脚本在称为孤立世界的特殊环境中执行

  2.   
  3. 他们可以访问注入页面的DOM,但不能访问页面创建的任何JavaScript变量或函数。

  4.   
  5. 页面上运行的JavaScript无法调用任何函数或访问内容脚本定义的任何变量。

  6.   

我相信#3告诉我们如果扩展程序不在我们的控制之下,我们不知道是否有一些内容脚本正在运行。

答案 1 :(得分:0)

您可以尝试将此类脚本添加到您自己的浏览器中,看看它是如何显示的。如果它确实出现在渲染的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脚本是沙盒。找出如何预防事情的最好方法是尝试自己做这件事,看看它是如何影响页面的。

您还应该问自己是否真的有必要防止这种情况发生。这似乎不太可能是安全风险。

答案 2 :(得分:0)

Content scripts可以访问相同的DOM,但可以在a isolated environment中运行,这意味着他们无法访问/更改您的javascript,但他们可以更改您的DOM。

如果要检测更改DOM的内容脚本,可以使用MutationObserver监听DOM更改。如果您自己不改变DOM(例如使用React),您可以听取任何更改。