作者:微信小助手
发布时间:2025-07-11T21:13:36
// 禁用右键菜单
document.addEventListener('contextmenu', e => e.preventDefault());
// 禁用F12、Ctrl+Shift+I等快捷键
document.addEventListener('keydown', e => {
if (e.key === 'F12' || (e.ctrlKey && e.shiftKey && e.key === 'I')) {
e.preventDefault();
}
});
❌ 缺点:用户仍可通过浏览器菜单栏打开开发者工具。
// 利用窗口大小变化检测DevTools
window.addEventListener('resize', () => {
if (window.outerWidth - window.innerWidth > 100
|| window.outerHeight - window.innerHeight > 100) {
alert("检测到开发者工具!");
window.close(); // 尝试关闭窗口
}
});
❌ 缺点:
全屏切换时的尺寸变化可能被误判;
独立打开控制台页面时无法监听到;
setInterval(() => {
(function (a) {
return (function (a) {
return Function('Function(arguments[0]+"' + a + '")()');
})(a);
})("bugger")("de", 0, 0, (0, 0));
}, 1000);
❌ 缺点:用户可禁用断点(Deactivate breakpoints
)绕过
// 利用debugger检测控制台是否打开
setInterval(() => {
const start = Date.now();
debugger;
if (Date.now() - start > 100) {
alert("禁止调试!");
window.location.href = "about:blank"; // 跳转空白页
}
}, 1000);
❌ 缺点:
Deactivate breakpoints
)绕过。
优化
// 利用console.table在控制台打开时耗费时间更长检测控制台是否打开
function initData() {
for (
var o = (function () {
for (var w = {}, D = 0; D < 500; D++) w["".concat(D)] = "".concat(D);
return w;
})(),i = [],c = 0;c < 50;c++) i.push(o);
return i;
}
let largeObjectArray = initData()
setInterval(() => {
const start = Date.now();
console.table(largeObjectArray)
if (Date.now() - start > 100) {
window.location.href = "about:blank"; // 跳转空白页
}
}, 1000);
❌ 缺点:
网站安全不能只依赖前端技术,前端只能“防君子不防小人”。有一定技术能力的用户都可以绕过前端防护,并反编译前端代码。还是得靠后端服务来确保网站的安全。
关注公众号,获取更多前端技术问题。动动小手,点个赞吧