为了安全,有时候我们需要对我们的页面做一些限制。防止别人直接拿到你的代码。以下是我搜集多位大佬总结出来的。 (警告一定要看)
方法1 (有用却不完善)
// 复杂
window.onload = function() {
//屏蔽键盘事件
document.onkeydown = (e)=> {
console.log(e);
if (e.keyCode == 123) { // 屏蔽F12
return false;
} else if ((e.ctrlKey) && (e.shiftKey) && (e.keyCode == 73)) { // 屏蔽Ctrl+Shift+I
return false;
} else if ((e.shiftKey) && (e.keyCode == 121)) { // 屏蔽Shift+F10
return false;
} else if ((e.ctrlKey) && (e.keyCode == 85)) { // 屏蔽Ctrl+U
return false;
} else if ((e.ctrlKey) && (e.keyCode == 83)) { // 屏蔽Ctrl+S
return false;
}
};
//屏蔽鼠标右击
document.oncontextmenu = ()=> {
return false;
}
}
// 简化
document.oncontextmenu = new Function("return false;");
document.onkeydown = document.onkeyup = document.onkeypress = function(event) {
var e = event || window.event || arguments.callee.caller.arguments[0];
if (e && (e.keyCode == 123 || e.keyCode == 116)) {
e.returnValue = false;
return (false);
}
}
⚠️ 这是两个方法;功能有差异但是都是为了防止审核元素。
⚠️ 主要实现:我们平时f12或右键鼠标和快捷键的一些操作;有用却不完善,原因我提前打开审核元素在输入网址仍可以看到代码
方法2 (有用,本人在用)
<script>
((function() {
var callbacks = [],
timeLimit = 50,
open = false;
setInterval(loop, 1);
return {
addListener: function(fn) {
callbacks.push(fn);
},
cancleListenr: function(fn) {
callbacks = callbacks.filter(function(v) {
return v !== fn;
});
}
}
function loop() {
var startTime = new Date();
debugger;
if (new Date() - startTime > timeLimit) {
if (!open) {
callbacks.forEach(function(fn) {
fn.call(null);
});
}
open = true;
window.stop();
// alert('⚠️禁止');
document.body.innerHTML = "";
} else {
open = false;
}
}
})()).addListener(function() {
window.location.reload();
});
</script>
<script>
(function (a) {
return (function (a) {
return (Function('Function(arguments[0]+"' + a + '")()'))
})(a)
})('bugger')('de', 0, 0, (0, 0));
</script>
⚠️ 主要实现:当你打开f12(也叫审核元素、检查)时;自动触动debugger;并且body中的内容为空。
⚠️⚠️⚠️ 代码涉及到setInterval 记得最后清除 window.clearInterval()。 需求不同清除的位置不同,本文我没写
方法3 (有用但不完善)
function inlobase_noF12() {
while (1) {}
}
function inlojv_console() {
if ((window.console && (console.firebug || console.table && /firebug/i.test(console.table()))) || (typeof opera == "object" && typeof opera.postError == "function" && console.profile.length > 0)) {
inlobase_noF12()
}
if (typeof console.profiles == "object" && console.profiles.length > 0) {
inlobase_noF12()
}
}
inlojv_console();
window.onresize = function() {
if ((window.outerHeight - window.innerHeight) > 200) {
inlobase_noF12()
}
};
⚠️ 主要实现:打开f12页面直接卡死;有用却不完善,原因我提前打开审核元素在输入网址仍可以看到代码 (同方法1类似)
补充4(断点,浏览器开启f12就会停止运行)
<script type="text/javascript">
function customDebug() {
for(var i = 0; i < 10; i++) {
console.log(i);
if(i % 1 == 0) {
debugger;
}
}
}
customDebug();
</script>
补充5(攻击浏览器,用户开启f12后,cpu就会爆)
var total="";
for (var i=0;i<1000000;i++)
{
total= total+i.toString();
history.pushState(0,0,total);
}
⚠️ 补充4和补充5这两种只能防止 浏览器抓包
总结
本文集多个大佬文章完成,仅供参考! 完