网站这样来屏蔽开发者工具,不比监听MouseDown舒服?
之前,我曾提过一个问题, 网站如何检测到是否开启开发者工具?
问题很火,是5月份问题top1, 后面管理员给我删除掉了...
在此, 把这问题及解决方法记录下来.
监听键盘事件F12之类的方法, 不记录, 因为刚开始大家都是这么玩的。
方法一
chrome72以下
var im = new Image();
Object.defineProperty(im, 'id', {
get: function() {
window.location.href = "http://106.53.103.200:8082/error.html"
blast();
}
});
console.log(im);
//谷歌最新版失效
原理就是chrome在打开控制台的时候会读取页面上所有的id元素.
方法二
let num = 0;
//谷歌最新版有效
var devtools = new Date();
devtools.toString = function() {
num++;
if (num > 1) {
window.location.href = "http://106.53.103.200:8082/error.html"
blast();
}
}
console.log('', devtools);
只有打开控制台,才会执行console打印方法, 由此控制。
以上两个方法,堪称无解,任何人都打不开控制台, 两个方法都是利用了数据劫持,或者重写一些核心方法而达到的,值得思考。
制裁方法 世界上没有完全安全的方案,所以以上两种方法也有了应对的方法。我也是实践过了,才将方法分享出来。
制裁原理: nginx反向代理第一步, 配置nginx
server {
listen 82;
server_namelocalhost;
location / {
root html;
try_files $uri $uri/ /index.html;
}location /static/ {
// 这个是使用上以上方法让开发者工具无法打开的网站。
proxy_pass http://xxxxxxx:8080;
}
}
第二步, 自己写index.html
【网站这样来屏蔽开发者工具,不比监听MouseDown舒服?】虽然开发者工具不能打开, 但是可以ctrl+U查看源代码. 因为现在js驱动网站很多, 大部分是js引用,没有具体的html代码.
现在输入localhost:82, 就可以破解啦.
反制裁方法 以上方法是通过nginx代理从而破解的,反制裁的思路就是不让nginx进行代理。
如果一个链接存在协议+域名(或者ip), 那么nginx是无法代理的。通常说,
/static/js....
是能被代理的, 而具体的链接 http://12.134./static/js...
是不能被代理的。或者有更好的方法,
页面引入如下js
而
/static/js/test.js
返回如下类似片段document.write('')
这样,nginx照样无法进行反向代理, 很多网站(百度地图, 超图等)都是这种做法。
推荐阅读
- 一个小故事,我的思考。
- 9班|9班 刘志雪
- 一个人的碎碎念
- 第326天
- 猎杀IP
- 我从来不做坏事
- 年味真的是越来越淡了么
- 感恩之旅第75天
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- 雅集