script(error错误怎么办及如何根治ScriptError.)
hello大家好,我是城乡经济网小晟来为大家解答以上问题,script,error错误怎么办及如何根治ScriptError.很多人还不知道,现在让我们一起来看看吧!
作者:卢峰(清锐)
本文简要介绍了 script Error 问题的来龙去脉,但也不局限于 Script Error,对于通用的系统性问题,应该找到系统性解决方案,进而治标治本。
受浏览器同源策略限制,未知跨域脚本执行错误时,抛出的错误信息为 "Script error.",导致开发者无法定位具体错误。为了获取详细错误信息及堆栈,一般解法是给 Script 标签配置 crossorigin 属性,同时对应脚本服务端需配置 Access-Control-Allow-Origin 响应头。
另外还有一些 hack 解法,对浏览器原生 API 做代理,将业务代码放在 Try Catch 作用域中执行,但写好代理方法是不容易的,粗制滥造的代理方法会制造很多隐藏 Bug,并且大量 Try Catch 在一些 JS Engine 中也存在额外性能损耗,为了解决 Script Error 采用此方案得不偿失。
异步加载脚本套娃,A 加载 B,B 加载 C,以至于不知道加载了哪些外部脚本
需要服务端配合设置响应头 Access-Control-Allow-Origin
外部注入代码,如浏览器插件、定制 Webview 容器(xx 浏览器)
从 2006 年一篇安全漏洞文章说起:I know if you're logged-in, anywhere
在那个年代大量网站都是服务端渲染,服务端根据用户登录态返回不同页面内容,黑客通过 Script 加载目标站点,用户已登录、未登录返回的 Response 内容不同,报错信息也会有差异,这样就可以通过报错信息区分用户是否登录,进一步展开针对性的攻击。
<script src=” http://mail.google.com/mail/”></script>
已登录:
**未登录: **
对于其他站点也是类似,错误信息中总会有差异,比如亚马逊登录和未登录,报错的 LineNo 不同。
基于此,WHATWG 对错误信息透出制定了规范:
Chrome 实现:
《I know if you're logged-in, anywhere》地址:https://blog.jeremiahgrossman.com/2006/12/i-know-if-youre-logged-in-anywhere.html
通过以上信息,我们可以理解 Script Error 的设计初衷以及其合理性,但我也有疑问,在今天浏览器同源策略比较完善的情况下,是否有必要屏蔽所有信息(error message、lineno、colno、url)?能否将发生 Script Error 的脚本 url 暴露出来,以便开发者收集到错误信息时快速定位错误来源,这样也方便评估影响面,比如明显是注入的脚本错误,直接忽略即可。
翻阅 WHATWG Github 历史 issue,发现已经有过相关讨论,很明确答案是 No,大概原因是当前的同源策略已经很全面(复杂),不想在挖坑。以至于对 unhanlderejection,连 Script Error 都不愿意报。
相关讨论地址:https://Github.com/whatwg/html/issues/2440unhanlderejection地址:https://github.com/whatwg/html/issues/5051
我在几个大厂网站上做了测试,加载一个第三方脚本,第三方脚本一定会报错,看看对应站点如何处理。
var s = document.createElement('script'); s.src = 'https://g.alicdn.com/dinamic/h5-tb-cart/5.0.41/index.min.js'; document.body.appendChild(s);
面向未来看问题,我们不能与标准背道而驰,同源策略是当前解决 Web 安全问题的重要手段,在未来只会更完善,我们应该积极了解与应用。当前国内互联网对同源策略的了解与应用大多止步于 Access-Control-Allow-Origin: *,这是远远不够的。
因此,面向未来 Script Error 问题 Twitter 的处理方式相对合理,只允许站点加载白名单脚本,对白名单脚本逐个做 CrossOring 等配置,同时也杜绝了外部脚本注入。对于淘宝来说,受限于业务体量以及历史包袱,做这种改造难度可想而知,但我们应该朝这个方向努力,而不是让开发者面对 Script Error 手足无措,靠猜测或是加错误过滤解决问题。
回到当下,短期的解决方案要增强跨域脚本的感知能力,可以配置 CSP Report Only 上报跨域脚本,也可以通过原始手段统计,进而对相关脚本做跨域配置,对于明显的跨域脚本如埋点、唤端、以及安全系列脚本,缺少 crossorigin 的尽快修复。
CSP Report Only地址:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
document.querySelectorAll('script[src]:not([crossorigin])')
本文简要介绍了 Script Error 问题的来龙去脉,但也不局限于 Script Error,对于通用的系统性问题,应该找到系统性解决方案,进而治标治本。
本文就为大家讲解到这里,希望对大家有所帮助。
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
传祺GS3试驾:线上+线下全攻略广汽传祺GS3凭借时尚设计与强劲性能,成为SUV市场中的热门车型。无论是线上了解...浏览全文>>
-
2024款安徽淮南威然的最新价格已经公布,各配置车型的售价信息如下:2024款威然330TSI商务版指导价:28 68万...浏览全文>>
-
淮南途锐新能源车的落地价分析如下:途锐新能源作为大众旗下的高端插电混动SUV,以其强劲的动力和豪华配置吸引...浏览全文>>
-
2023款大众探影在安徽阜阳地区的最新报价现已出炉,为计划购车的朋友带来实惠。作为一款小型SUV,探影凭借时尚...浏览全文>>
-
近日,滁州地区2025款高尔夫的市场价格吸引了众多消费者的关注。根据最新数据显示,近一个月以来,该款车型的...浏览全文>>
-
QQ多米落地价:各配置车型售价一览奇瑞QQ多米作为一款备受关注的小型电动车,凭借其亲民的价格和实用的配置,...浏览全文>>
-
2025款途锐作为大众旗下的豪华SUV,以其强劲的动力、卓越的性能和高端配置吸引了众多消费者的目光。目前市场上...浏览全文>>
-
淮南途锐新能源2024款即将上市,作为大众旗下的高端SUV车型,途锐新能源以其卓越的性能和豪华配置赢得了广泛好...浏览全文>>
-
近日,阜阳地区传来好消息,2025款途锐正式到店,最低售价仅为55 88万元起。作为大众旗下的豪华SUV车型,途锐...浏览全文>>
-
近期,安徽淮南地区的探影车型迎来了一波购车优惠,最低售价仅需11 59万元起,对于预算有限但又想拥有一辆高...浏览全文>>
- 安徽淮南威然最新价格2024款,各配置车型售价全知晓
- 滁州高尔夫 2025新款价格走势,近一个月最低售价10.68万起,性价比凸显
- 滁州途锐新款价格2025款多少钱?买车攻略一网打尽
- 安徽淮南探影落地价,最低售价11.59万起,入手正当时
- 安徽淮北高尔夫多少钱 2025款落地价限时特惠,最低售价12.99万起,错过不再有
- 安徽阜阳途昂最新价格2025款,各配置车型售价全知晓
- QQ多米价格,最低售价5.99万起,入手正当时
- 安徽淮南高尔夫多少钱 2025款落地价大起底,买车超详细
- 安徽淮南ID.4 X最新价格2025款全解买车必看
- 阜阳途锐新能源多少钱?报价解析,配置全面升级
- 比亚迪唐新能源预约试驾,如何在4S店快速预约?
- 安徽阜阳途观L落地价全解,买车必看的省钱秘籍
- 阜阳ID.4 X多少钱?最低售价13.99万起,性价比大揭秘
- 领克900试驾怎么预约
- 试驾本田CR-V,如何享受4S店的专业服务?
- 池州ID.6 X新款价格2023款多少钱?买车攻略一网打尽
- 生活家PHEV落地价,各配置车型售价一目了然
- 亳州大众CC价格,换代前的购车良机,不容错过
- 蚌埠途安L新车报价2022款大起底,买车超详细
- 奥迪e-tron GT试驾,如何享受4S店的专业服务?