问题描述
我们可以使用以下方法打开浏览器开发控制台:
F12
,Ctrl+Shift+C
,Ctrl+Shift+I
和...
我阻止了右键单击以及使用此代码的那些键:
document.addEventListener('contextmenu',function(e) {
e.preventDefault();
});
document.onkeydown = function(e) {
if(event.keyCode == 123) {
console.log('You cannot inspect Element');
return false;
}
if(e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) {
console.log('You cannot inspect Element');
return false;
}
if(e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0)) {
console.log('You cannot inspect Element');
return false;
}
if(e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)) {
console.log('You cannot inspect Element');
return false;
}
if(e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)) {
console.log('You cannot inspect Element');
return false;
}
}
// prevents right clicking
document.addEventListener('contextmenu',e => e.preventDefault());
现在假设开发者控制台已经打开,并且我们的页面正在加载, 当页面加载时,我想以编程方式使用javascript关闭此开发人员控制台窗口。这可能吗?
解决方法
我认为阻止开发者控制台是完全不可能的,即使使用您建议的方法,用户也可以使用Chrome并重新映射开发者控制台热键以打开它。 Hell,even a Facebook engineer had tried to do it in the Facebook site but gave up。
我的建议是在控制台中添加一条警告消息,并警告用户不要在其中键入任何内容,这也是大型站点也在做的事情。或者您可以极端地做console = null
,因为大多数注入脚本包含或多或少的console.log
,这会破坏它们的脚本,不利之处是您也无法做到console.log
除非您手动注入console
。
我认为这是不可能的,因为您将修改浏览器的行为,这显然不会让您这样做。但是,我不确定100%是否如此,我认为让网站未经授权修改浏览器的行为是安全漏洞。
即使有可能,也有很多人可以绕开它,例如禁用javascript或在其末端注入脚本以删除事件侦听器,从而使他可以访问DevTools。
此外,如果您试图阻止某人看到您的HTML源代码(根据我在您发布的代码段中看到的内容),那么某人可以仅通过简单的GET请求下载源代码,并使用自己的工具进行查看
总而言之,一旦它最终出现在他人的浏览器上,他们几乎可以对您提供的内容进行任何处理。这就是为什么不应将前端视为“安全”的唯一层。您可以让用户很难去做您不希望他们做的事情,但是您永远不能完全阻止他们。