通过window.onerror
捕获到js error以后,发现js error都是Script error
,毫无参考价值,webkit源码查看可知,script资源加载的地方,是进行了同源策略判断的,如果是非同源资源,errorMessage就被写死了Script error
File跨域漏洞
UIWebView虽然已经被遗弃,但依然还有很多app继续使用,且最新版本的iOS也会兼容UIWebView。由于UIWebView本身存在严重的跨域漏洞,所以只要使用UIWebView都有可能存在跨域漏洞。漏洞原因在于UIWebView的WebKitAllowUniversalAccessFromFileURLs和WebKitAllowFileAccessFromFileURLs默认开启,导致通过js可以访问沙箱内的文件,甚至可以静默上传文件到远端。
WKWebView默认allowFileAccessFromFileURLs和allowUniversalAccessFromFileURLs选项为false,但如果开发者开启了这两个API,同样存在跨域漏洞。但是如果开启了这两个API,我们就可以让WKWebView支持跨域JS Error的捕获,代码如下所示:
//存在跨域漏洞
[configuration setValue:@TRUE forKey:@"allowUniversalAccessFromFileURLs"];
[configuration.preferences setValue:@"TRUE" forKey:@"allowFileAccessFromFileURLs"] ;
但是在这样的情况下,也会存在毫无参考价值的Script error
,我理解是因为虽然WKWebView支持了跨域JS Error捕获,但是本身的js资源也要支持跨域,静态资源请求需要加多一个Access-Control-Allow-Origin头部,同时script引入外链的标签需要加多一个crossorigin的属性
参考文章
1、https://www.baidufe.com/item/7ee009bfbcd0fe94bd3e.html
2、https://www.cnblogs.com/cathsfz/p/how-to-capture-and-analyze-javascript-error.html
3、https://stackoverflow.com/questions/50229935/wkwebview-get-javascript-errors
4、https://mabin004.github.io/2018/06/25/iOS%E5%BA%94%E7%94%A8%E6%B2%99%E7%AE%B1/
5、http://rapheal.sinaapp.com/2014/11/06/javascript-error-monitor/