admin管理员组文章数量:1516870
话题背景:
为了提高web开发质量,我们通常会在web前端页面里注册window.onerror事件,然后将统一的脚本错误信息发送到服务器汇总和统计,每天计算出错误排行榜,以方便我们跟踪和解决问题。
window.onerror = function(msg,url,line,row){
$.badjs(msg,url,line,row,上报ID); //创建图片请求,并加上一些前台需要搜集的信息
}
但是最近统计发现有大量的Script error信息,排 行第一且没有给出具体的错误内容。
出现“Script error”的场景和条件:
1、通过window.onerror注册监听脚本错误事件
2、浏览器:Firefox、Chrome、Safari、Opera等浏览器历史版本
3、页面内使用了script标签引入,非同域的JS或者HTML;且出现脚本错误。
Eg: 里 <script src=” “></script>
出现“Script error”的原因(只列举webkit;ff同理):
不难看出,在出发脚本错误提示的时候,通过secureityOrigin()里的方法判断了是否是同源可用。不是的话,就生成massage为“Script error”,错误行号为0的信息。
浏览器限制同源脚本错误背景分析:
本质上是出于安全考虑。因为script引入文件内容的时候是忽略文件本身的MIME声明,且是允许跨域请求的。这里如果不屏蔽掉跨域情况下的错误信息,很可能会给黑客提供一个攻击通道。
比如:
1、qq.com有个页面pay.html(在有登录态的情况下)会有两种显示内容:“您当前的余额为0元”或“您当前的余额为100元”
2、hacker.com/index.html页面里通过script引入了这个
那么黑客就可以在hacker.com上获取到错误:“Uncaught ReferenceError: 你的余额为100 is not defined| ”。此时黑客已经间接的获取到了他想要的信息,那么黑客可以通过遍历等方式将信息最大化。
应对办法:
目前Firefox 13+,Chrome 2012.12.9号之后版本均已经支持:通过设置同源策略来显示错误信息。
a、设置 script 标签的 crossorigin
Eg: <script src=” ” crossorigin></script>
b、设置javascript文件的HTTP头
Access-Control-Allow-Origin:
对于使用CEF(Chromium Embedded Framework)的项目可以直接更新代码或手动修改代码:
Source/WebCore/dom/ScriptExecutionContext.cpp ,301-309,
301 | if (securityOrigin()->canRequest(targetUrl)) { |
| message = errorMessage; | |
| line = lineNumber; | |
| sourceName = sourceURL; | |
| } else { | |
| message = ”Script error.”; | |
| sourceName = String(); | |
| line = 0; | |
| } | |
301 | message = errorMessage; |
| line = lineNumber; | |
|
sourceName = sourceURL;
|
版权声明:本文标题:Flash中心报错“Script error”?这里有一线希望! 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1771343869a3264446.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论