浏览器加载一个js脚本,会在devtools中留下各种痕迹,elements中的script元素,console中的日志,source中的代码,network中的网络请求等
前端30K面试准备,最完整面试真题分享!
elements
这个比较简单,插入js的时候设置好id,在js中删掉自身就好了
![06f6c786318eb911704731d13b9dcd94.png](https://i-blog.csdnimg.cn/blog_migrate/9b8320f4b1904b6d696b86715bb8be3d.png)
对于引用js
![04f31f4eb5d1ef52fd9d2e4b8c693a84.png](https://i-blog.csdnimg.cn/blog_migrate/125cfbfc8798125c1e492bb985837be5.png)
对于动态加载的js也是一样的
![e5a54fd00025cd4f9361fc61f67f1f20.png](https://i-blog.csdnimg.cn/blog_migrate/aed6f2067efacf0b8e2655b38cc480ab.png)
![ced5498bfec7b6b9a36d0881855c96e9.png](https://i-blog.csdnimg.cn/blog_migrate/8eede3200621697f89932869d1ffac5a.png)
或者也可以这样
![b086360db5bb4bfc764d5fc997ee13a6.png](https://i-blog.csdnimg.cn/blog_migrate/6b7dc28b42344706b8840c844b63f1a6.png)
虽然看起来很奇怪,但a.js确实能执行,似乎是加载a.js时阻塞了脚本执行,执行完a.js之后再remove
console
clear就好了
![9a9f564b7b03d2f0294fd974a27a0de8.png](https://i-blog.csdnimg.cn/blog_migrate/d7e85684c47c63d9c1d781f3f0dc4e62.png)
source
直接引用和动态加载都会在source中出现
![7aa46047e464ca2591550f9ec827f3df.png](https://i-blog.csdnimg.cn/blog_migrate/963f5dca2d5a8553f0f7789c7e560e56.png)
这样都是不行的,经过测试发现动态插入js代码时不会被记录在source中
![e4f7dbe774634e13eeb84d04e59378b4.png](https://i-blog.csdnimg.cn/blog_migrate/1f3d123291627c53ee5fb2acb80014fb.png)
这样a.js就不会出现在source里了
network
常规HTTP/WebSocket都会被记录,无法绕过,但是WebRTC不会,WebRTC可以基于UDP/TCP传输,WebRTC提供createDataChannel API,可以用于传输文本,那么就可以实现network隐藏加载
考虑WebRTC需要传递offer和icecandidate,还是得通过HTTP/WebSocket传输,而且复杂网络环境下还需要使用或部署STUN/TURN服务器,稳定性有待考虑
WebRTC技术可以参考学习我最近看的几篇文章透明日报20200801期
其他的方法我还没有找到,技术不行就社会工程
一个思路是可以伪装成其他流量混过去,比如png
![c4f0e22705eb39ac1ba0940109e6185c.png](https://i-blog.csdnimg.cn/blog_migrate/594d6c4f4a96783db5d9f6602fe29c29.png)
然后在delvtools里也看不出来
![4546d15771bf81ac2e39c6698cc0a22d.png](https://i-blog.csdnimg.cn/blog_migrate/6c92ae0db669c051f6a2eab65948867b.png)
另外一个思路是devtools目前只在打开的时候记录network数据,那么只要在devtools关闭的时候加载资源,打开就不加载,这样就不会出现在network里了
新的问题又出现了,如何检测devtools的状态,网上已经有不少公开技巧了
https://github.com/sindresorhus/devtools-detect
https://github.com/AEPKILL/devtools-detector
最后
还可以在哪里找到加载和执行痕迹呢
还有什么方法可以隐藏这些痕迹呢
前端30K面试准备,最完整面试真题分享!