window.error “Script error”问题跟进

来源:互联网 发布:淘宝买不了q币了 编辑:程序博客网 时间:2024/05/19 12:16

http://www.webryan.net/2012/12/something-about-window-onerror-script-error/


话题背景:

为了提高web开发质量,我们通常会在web前端页面里注册window.onerror事件,然后将统一的脚本错误信息发送到服务器汇总和统计,每天计算出错误排行榜,以方便我们跟踪和解决问题。

window.onerror = function(msg,url,line,row){

$.badjs(msg,url,line,row,上报ID); //创建图片请求,并加上一些前台需要搜集的信息

}

但是最近统计发现有大量的Script error信息,排 行第一且没有给出具体的错误内容。

error

 

出现“Script error”的场景和条件:

1、通过window.onerror注册监听脚本错误事件

2、浏览器:Firefox、Chrome、Safari、Opera等浏览器历史版本

3、页面内使用了script标签引入,非同域的JS或者HTML;且出现脚本错误。

Eg: http://zc.qq.com/index.html 里 <script src=”http://1.url.cn/b/js/10001/simple.js“></script>

 

出现“Script error”的原因(只列举webkit;ff同理):

 

code

 

不难看出,在出发脚本错误提示的时候,通过secureityOrigin()里的方法判断了是否是同源可用。不是的话,就生成massage为“Script error”,错误行号为0的信息。

 

 浏览器限制同源脚本错误背景分析:

本质上是出于安全考虑。因为script引入文件内容的时候是忽略文件本身的MIME声明,且是允许跨域请求的。这里如果不屏蔽掉跨域情况下的错误信息,很可能会给黑客提供一个攻击通道。

比如:

1、qq.com有个页面pay.html(在有登录态的情况下)会有两种显示内容:“您当前的余额为0元”或“您当前的余额为100元”

2、hacker.com/index.html页面里通过script引入了这个http://qq.com/pay.html的话

那么黑客就可以在hacker.com上获取到错误:“Uncaught ReferenceError: 你的余额为100 is not defined|http://hacker.com/index.html|1”。此时黑客已经间接的获取到了他想要的信息,那么黑客可以通过遍历等方式将信息最大化。

 

应对办法:

目前Firefox 13+,Chrome 2012.12.9号之后版本均已经支持:通过设置同源策略来显示错误信息。

a、设置 script 标签的 crossorigin

Eg:    <script src=”http://somremotesite.example/script.js” crossorigin></script>

b、设置javascript文件的HTTP头

Access-Control-Allow-Origin: http://qq.com

对于使用CEF(Chromium Embedded Framework)的项目可以直接更新代码或手动修改代码:

Source/WebCore/dom/ScriptExecutionContext.cpp ,301-309,

 

301

    if (securityOrigin()->canRequest(targetUrl)) {

302

        message = errorMessage;

303

        line = lineNumber;

304

        sourceName = sourceURL;

305

    } else {

306

        message = ”Script error.”;

307

        sourceName = String();

308

        line = 0;

309

    }

310

 

 

 

301

    message = errorMessage;

302

    line = lineNumber;

303

    sourceName = sourceURL;

原创粉丝点击