0x00 前言

网站禁用调试模式是一种常见的网站安全措施,旨在防止攻击者利用浏览器开发工具(如Chrome DevTools)对网站进行恶意攻击或窃取敏感信息。禁用调试模式通过限制或禁止开发工具的使用,增强网站的安全防护。

实现网站禁用调试模式的技术方法有多种。一种常见的方法是在网页代码中插入JavaScript代码来检测是否打开了开发工具。如果检测到开发工具被打开,则会禁用页面的一些功能,或将页面重定向到其他页面。这种方法的实现相对简单,但也存在一定的被绕过风险。

另一种更为安全的方法是使用服务器端的技术来检测是否打开了开发工具。服务器端可以检测客户端请求头中的User-Agent字段,以识别浏览器和开发工具的类型。如果检测到请求头中包含开发工具的信息,服务器端可以采取相应的措施来禁止对网站进行攻击。

本文主要介绍通过网站中引入JavaScript代码,禁止攻击者打开DEvtools实现。

0x01 实现步骤

新建bandev.js文件

在theme对应主题下的新建 source/js/bandev.js(自行修改提示文字)

//禁止右键
document.oncontextmenu = new Function("event.returnValue=false;") //禁用右键

// 监听按键
document.onkeydown = function () {
// f12
if (window.event && window.event.keyCode == 123) {
alert("F12被禁用");
event.keyCode = 0;
event.returnValue = false;
}
// ctrl+shift+i
if (window.event.ctrlKey && window.event.shiftKey && window.event.keyCode == 73) {
alert("ctrl+shift+i被禁用");
event.keyCode = 0;
event.returnValue = false;
}
// ctrl+s
if (window.event.ctrlKey && window.event.keyCode == 83) {
alert("ctrl+s被禁用");
event.keyCode = 0;
event.returnValue = false;
}
// ctrl+p
if (window.event.ctrlKey && window.event.keyCode == 80) {
alert("ctrl+p被禁用");
event.keyCode = 0;
event.returnValue = false;
}
}

//禁止先打开控制台然后强行进入
function a() {
// 这里我做的是跳转首页,可以根据实际需要进行其他限制
var domain = window.location.host;// 获取当前域名
window.location.href = "https://" + domain;
return false;
}
if (window.outerHeight - window.innerHeight > 150) {
a()
}
if (window.outerWidth - window.innerWidth > 150) {
a()
}

主要分为三个方面的思路:

1、禁止右键

2、禁止特定按键

3、禁止先打开控制台后强制进入

下面具体说明这三个的实现方法:

禁止右键

1、最简单的一行代码搞定:document.oncontextmenu是一个事件处理器,它会在用户尝试在文档上执行右键点击(即打开上下文菜单)时被触发,调用函数,将event.returnValue设置为false默认阻止此事件的发生。

document.oncontextmenu = new Function("event.returnValue=false;") //禁用右键

2、但需要注意,上面的代码适用于旧的浏览器(如IE)版本,在更现代的浏览器(如Chrome, Firefox等)中,这种方式可能不会起作用。对于更现代的浏览器,通常会使用event.preventDefault()方法来阻止默认行为。

document.oncontextmenu = function(event) {  
event.preventDefault();
return false;
};

禁止特定按键

防止F12和shift+ctrl+i调起开发者工具;并且禁用ctrl+s和ctrl+s,防止对网页内容本地保存

监听按键事件,对上述的按件进行监听,如果监听到设置event.returnValue = false。

// 监听按键
document.onkeydown = function () {
// f12
if (window.event && window.event.keyCode == 123) {
alert("F12被禁用");
event.keyCode = 0;
event.returnValue = false;
}
// ctrl+shift+i
if (window.event.ctrlKey && window.event.shiftKey && window.event.keyCode == 73) {
alert("ctrl+shift+i被禁用");
event.keyCode = 0;
event.returnValue = false;
}
// ctrl+s
if (window.event.ctrlKey && window.event.keyCode == 83) {
alert("ctrl+s被禁用");
event.keyCode = 0;
event.returnValue = false;
}
// ctrl+p
if (window.event.ctrlKey && window.event.keyCode == 80) {
alert("ctrl+p被禁用");
event.keyCode = 0;
event.returnValue = false;
}
}

禁止先打开控制台后强制进入

如果用户在工具栏调起开发者工具,那么判断浏览器的可视高度和可视宽度是否有改变,如有改变则关闭本页面

//禁止先打开控制台然后强行进入
function a() {
var domain = window.location.host;// 获取当前域名
window.location.href = "https://" + domain;
return false;
}
if (window.outerHeight - window.innerHeight > 150) {
a()
}
if (window.outerWidth - window.innerWidth > 150) {
a()
}

最终代码

//禁止右键
document.oncontextmenu = function(event) {
event.preventDefault();
return false;
};

// 监听按键
document.onkeydown = function () {
// f12
if (window.event && window.event.keyCode == 123) {
event.keyCode = 0;
event.returnValue = false;
}
// ctrl+shift+i
if (window.event.ctrlKey && window.event.shiftKey && window.event.keyCode == 73) {
event.keyCode = 0;
event.returnValue = false;
}
// ctrl+s
if (window.event.ctrlKey && window.event.keyCode == 83) {
event.keyCode = 0;
event.returnValue = false;
}
// ctrl+p
if (window.event.ctrlKey && window.event.keyCode == 80) {
event.keyCode = 0;
event.returnValue = false;
}
}

//禁止先打开控制台然后强行进入
function a() {
alert("请关闭控制台后再访问本站!!!")
var domain = window.location.host;// 获取当前域名
window.location.href = "https://" + domain;
return false;
}
if (window.outerHeight - window.innerHeight > 150) {
a()
}
if (window.outerWidth - window.innerWidth > 150) {
a()
}

hexo一键三连后,查看效果

执行效果如下:

  • 右键、特定按键打开Devtools,无反应
  • 先打开控制台后强制进入,会弹窗,强制关闭devtools

image-20240409164540557