Script error.全面解析
2019独角兽企业重金招聘Python工程师标准>>>
一些用户向我们反馈,Fundebug的JavaScript监控插件抓到了很多Script error.,然后行号和列号都是0...这就很尴尬了。
今天,我们来详细地解析一下Script error.
,后续我们还会深度测试并且提供解决方法。
同源策略 (Same origin policy)
解释Script error.
之前,我们先简单聊聊同源策略。摘自MDN - Same-origin policy:
Two pages have the same origin if the protocol, port (if one is specified), and host are the same for both pages.
所谓同源,就是指两个页面具有相同的协议、端口和主机(域名)。通过第三方加载的JavaScript脚本是不同源的。下面的表格简单列出了和https://fundebug.com/app.js
是否同源的文件:
<style type="text/css"> code { text-overflow:clip;/*文本裁切*/ white-space:nowrap;/*强制不换行*/ overflow:hidden;/*溢出隐藏*/ } </style>
网址 | 是否同源 | 原因 |
---|---|---|
https://fundebug.com/vendor.js
|
是 | |
http://fundebug.com/vendor.js
|
否 | 协议不同 |
https://fundebug.com:8001/app.js
|
否 | 端口不同 |
https://docs.fundebug.com/nav.js
|
否 | 子域名不同 |
https://kiwenlau.com/totop.js
|
否 | 域名不同 |
没有同源策略的话,将会怎样?摘自同源策略详解及绕过 - FreeBuf:
假设你已经成功登录Gmail服务器,同时在同一个浏览器访问恶意站点(另一个浏览器选项卡)。没有同源策略,攻击者可以通过JavaScript获取你的邮件以及其他敏感信息,比如说阅读你的私密邮件,发送虚假邮件,看你的聊天记录等等。 如果将Gmail替换为你的银行帐户,问题就大条了。
为啥出现Script error. ?
为了提升网站的访问速度,我们通常都会将静态资源文件(css, image, javascript)放在第三方CDN。当这些从第三方加载的JavaScript脚本执行出错,因为违背了同源策略, 为了保证用户信息不被泄露,错误信息不会显示出来,取而代之只会返回一个Script error.
。
暴露错误信息会怎样呢?摘自(Cryptic “Script Error.” reported in Javascript in Chrome and Firefox):
假想你不小心访问了一个恶意网站,网页里面偷偷放入了一段JavaScript脚本
<script src="cbcc.com/index.html">
,这段脚本指向你使用的某银行网站首页。虽然脚本会执行失败,但是错误信息却有可能泄露你的信息。如果你已经登录过该银行网站并且处于登录状态,那么错误信息可能为'欢迎你 ....' is undefined
;如果你没有登录,那么错误信息可能是'请登录...' is undefined
。 然后黑客就可以根据这些信息确定你使用的银行网站,并且伪造一个钓鱼网站来骗取钱财。
源码
webkit源码如下:
bool ScriptExecutionContext::dispatchErrorEvent(const String& errorMessage, int lineNumber, const String& sourceURL)
{EventTarget* target = errorEventTarget();if (!target)return false;...if (securityOrigin()->canRequest(targetUrl)) {message = errorMessage;line = lineNumber;sourceName = sourceURL;} else {message = "Script error.";sourceName = String();line = 0;}...
}
可知,浏览器会判断所加载的资源url是否同源(securityOrigin()->canRequest(targetUrl)
),如果不同源,则将错误消息隐藏,赋值为Script error.
, 并且将行号设为0.
因此,如果我们从第三方CDN服务加载资源,如果出错的话,那么我们将只能看到Script error.
。
错误复现
我们用一个简单的例子测试一下。下面是index.html,我们使用onerror来捕获错误。
<!DOCTYPE html>
<html>
<head><title>Test Script error</title><script type="text/javascript">window.onerror = function(errorMessage, scriptURI, lineNumber, columnNumber, error){console.log(errorMessage);console.log(scriptURI);console.log(lineNumber);console.log(columnNumber);console.log(error);}</script><script type="text/javascript" src="./scripterror.js"></script>
</head>
<body>
</body>
</html>
在scripterror.js中抛出一个Error对象:
throw new Error('Hello, Fundebug');
使用的http-server
挂载文件,打开http://localhost:8080/index.html,
在Chrome浏览器控制台下,可以看到详细的出错信息:
为了复现Scrpt error.
, 将scripterror.js
放到我在coding.net
的个人项目下面:
<!DOCTYPE html>
<html>
<head><title>Test Script error</title><script type="text/javascript">window.onerror = function(errorMessage, scriptURI, lineNumber, columnNumber, error){console.log(errorMessage);console.log(scriptURI);console.log(lineNumber);console.log(columnNumber);console.log(error);}</script><script type="text/javascript" src="http://coding.net/u/stefanzan/p/stefanzan/git/raw/coding-pages/public/js/src/scripterror.js"></script>
</head>
<body>
</body>
</html>
运行http-server
, 结果如下:
因为违背同源策略,这时只能拿到Script error.
。
总结
本文介绍了Script error.
的由来,并提供了一个简单的实例来演示什么情况下出现Script error.
。接下来,我们将对Script error进行深度测试并提出解决方法
版权声明:
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/04/05/understand-script-error/
转载于:https://my.oschina.net/u/3375885/blog/876823
Script error.全面解析相关推荐
- 压缩过的js代码怎么还原_Fundebug 前端 JS插件更新至 1.7.0,拆分录屏代码,还原部分 Script error....
摘要: BUG 监控插件压缩至 18K. 1.7.0拆分了录屏代码,BUG 监控插件压缩至18K,另外我们还原了部分 Script error,帮助用户更方便地 Debug.请大家及时更新哈~ 拆分录 ...
- Fundebug前端JavaScript插件更新至1.7.1,拆分录屏代码,还原部分Script error.
摘要: BUG监控插件压缩至18K. 1.7.1拆分了录屏代码,BUG监控插件压缩至18K,另外我们还原了部分Script error,帮助用户更方便地Debug.请大家及时更新哈~ 拆分录屏代码 从 ...
- Exception in thread main java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法
Exception in thread "main" java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static:只能在静态类型或顶级类型中才 ...
- 前端demo_【前端3分钟】Script Error产生的原因和解法
Script Error对于前端开发者相信都不陌生,而且由于没有具体错误堆栈和代码行列号,成为可能是最神秘的错误之一. 下面介绍Script Error产生的原理和解决办法. 1.Script Err ...
- 解决 Script Error 的另类思路
2019独角兽企业重金招聘Python工程师标准>>> 本文由小芭乐发表 前端的同学如果用 window.onerror 事件做过监控,应该知道,跨域的脚本会给出 "Scr ...
- java中无法解析的编译问题怎么解决,java.lang.Error: 无法解析的编译问题
Exception in thread "main " java.lang.Error: 无法解析的编译问题: 无法解析 MainWindow at MainWindow.main ...
- main java.lang,各位大哥办我看看,Exception in thread main java.lang.Error: 无法解析的编译有关问题...
当前位置:我的异常网» J2SE » 各位大哥办我看看,Exception in thread "main& 各位大哥办我看看,Exception in thread "m ...
- java script error_java script error 错误解决方法
用了动易这么久了,有时一不小心改错模版文件或者 修改相关的JS,就会导致页面出现一些奇怪了 的弹出框 说什么 java script error 错误,烦死了. 今天特别研究了下,找到了解决这类问题的 ...
- Ansys中meshing启动时经常弹出“script error”
最近在学习ansys的流固耦合仿真,在打开ansys 的meshing 时,总是弹出 script error的错误. 卸载的软件重新安装还是没有效果,后来想明白是之前为了释放C盘内存,修改了系统的临 ...
- xShell运行Python脚本报错 Python script error 80040154
xShell运行Python脚本报错 Python script error 80040154 这是由于没有安装 Python engine的原因. 解决方法如下: 1. 下载并安装 Python 访 ...
最新文章
- 线程的同步之Synchronized在单例模式中的应用
- git 撤销修改以及删除文件(亲测最后一个删除后还原)
- 1006. Sign In and Sign Out (25)
- linux的open的非组赛,Linux下的非阻塞IO库epoll
- JavaScript调用Web Services实现无刷新三联动
- 数据结构为什么那么难?
- 基于JAVA+SpringMVC+Mybatis+MYSQL的医院住院管理系统
- SAP License: 发票校验前收货后是否能更改物料价格
- 影视导航资源库api php,影视资源采集站
- 三星智能共享计算机软件,Samsung Smart View
- SOA面向服务架构详解
- ajaxSubmit异步提交
- 华为给出的测试账号里面的题
- VS Code设置缩进两个字符
- 如何提高思维能力(不止针对程序猿)
- 交互组件滚动条,搜索框,上传组件,翻页的微创新
- Windows PC连接苹果LG UltraFine 4K显示器教程
- 强化学习的探索和利用
- PAP认证、CHAP认证
- 廖雪峰讲python高阶函数求导_廖雪峰python课程笔记