如何在程序中关闭已经打开的 Google Chrome 开发者工具?

5

我已经禁用了网站上的Google Chrome开发者工具。但是,人们仍然可以使用以下方法访问它:

  1. 打开另一个网站,比如www.google.com
  2. 按F12键 -> 开发者控制台将打开
  3. 访问我的网站 -> 好了,现在可以使用Chrome开发者工具来操作我的网站。

我该如何禁止这种行为?如果Google Chrome开发者控制台已经打开,我该如何关闭它?


2
关闭开发者工具的目的是什么? - guest271314
一个使用案例可能是,如果我们由于用户访问设置而隐藏了一些按钮、链接等,则如果该元素存在于DOM中,用户可以轻松地启用该链接。这是我们想要防止的。 - Amit
如果该元素存在于DOM中,用户可以直接启用该链接。关闭“控制台”或“开发者工具”如何防止用户查看文档源代码?您是要禁用文档中的JavaScript吗?还是要防止用户更改元素? - guest271314
2
当用户设置允许访问元素时,您可以从最初加载到文档中的元素中排除某些元素,然后请求并将这些元素附加到文档中。 - guest271314
1
@aProgrammer 如果未经授权的用户可以加载任何他们不应该访问的页面,那么你的权限系统中肯定存在缺陷。你可以轻松地为用户声明一个等级,然后要求所有访问特定页面的用户都必须高于这个等级,如果不是,则页面会输出错误并且不执行任何请求。无论他们是否启用链接,你都将受到保护。 - BinaryEvolved
1
永远不要相信用户。因此,不要在客户端处理权限,而应该在服务器端处理,例如通过AJAX请求。 - Frederic Klein
4个回答

9
没有可靠的方法可以防止客户端修改或查看其浏览器接收到的任何数据。

我找不到禁用Chrome中F12开发工具等工具的合适理由或需要。只要您发送数据,就不可能执行此类操作。

假设通过Chrome中的某个漏洞或使用JavaScript,您能够禁用开发人员工具的访问。那很好!但是什么可以阻止用户(无论是否恶意)向您的网站发出cURL请求并保存HTML以供以后编辑和查看?什么也没有!

以下是您应该遵循的最佳实践,而不是无效地防止访问开发人员工具:

  1. 假定在任何时候向客户端发送的所有数据都将无限期保存。这也意味着客户端随时可以查看您的网站的源数据,以及所有已经存在过的版本。永远不要发送任何敏感信息,即使客户端失去了身份验证访问权限,这些信息可能稍后仍会被使用。
  2. 假定客户端可能使用不符合规定的浏览器。浏览器可能不执行或解释您的JavaScript,甚至可能在最终呈现给最终用户之前对其进行修改。您应该为兼容的浏览器开发您的网站,同时了解您不能信任客户端的JavaScript来确定用户是否应该对页面进行身份验证,此类处理需要在服务器端执行。
  3. 确保您网站的所有页面都显示正确的版权和许可条款。如果您担心所有艰苦工作的盗窃:尽管随机用户在几个小时后窃取您网站的设计可能很烦人,但他们可能对您的项目产生很少的影响。然而,明确声明的许可证和版权可以防止任何公司或学校项目的工作人员使用您的工作(根据许可证是否给予信用)。

即使有人能够修改您网站的源代码...那又怎样?只要您遵循适当的实践和指南,这并不重要。认证和逻辑都在服务器端处理,而JavaScript / HTML仅用于增强用户体验,而不是执行关键逻辑或数据交互。


3
实际上,您不应该禁用客户端的工具控制,以使您的网站/数据更加安全。无法防止用户通过一种或另一种方式打开开发者控制台,但有一种方法可以防止用户进行恶意活动/玩弄您的网站(极其糟糕的事情,但有可能)。您可以参考此问题以获取详细的了解和解决方案。保持在服务器端编写安全代码并允许某人下载数据是保护数据的唯一合理方法,但请记住他可以随心所欲地使用这些数据。

3

据我所知,这是不可能的

而且最好避免。即使找到了解决方案,请记住,大多数浏览器现在都允许用户防止Javascript干扰他们的浏览器设置和窗口外观,即使使用window.open也是如此。因此,您绝对无法保证您正在寻找的行为。

但是,您可以使用技巧来防止F12键。这可能对您有所帮助。

window.oncontextmenu = function () {
   return false;
}
document.onkeydown = function (e) { 
    if (window.event.keyCode == 123 ||  e.button==2)    
    return false;
}

我刚刚测试了一下,这对我有效... http://output.jsbin.com/vayukuqubo 它只是禁用页面上的右键单击和F12,但无法阻止用户打开Dev Tools菜单>工具>开发者工具

我认为我们不能在银行网站上做这件事…… - Amit
@aProgrammer 是的,我们无法做任何事情,因为这是最终用户的浏览器 :)。 - Anant Dabhi
我的意思是我们无法在银行网站上打开开发者工具。 - Amit
1
如果将鼠标放到地址栏上,你仍然可以打开开发工具。 - loislo
1
@aProgrammer 正如BinaryEvoloved所解释的那样,如果你依赖于隐藏发送给客户端的代码,那是行不通的。有比你想象中更多的方法可以获取客户端代码,即使没有开发控制台。有代理,有数据包捕获器,有内存扫描器,有https攻击,这些都超出了你的控制范围。将重要代码放在服务器上。 - Sheepy
显示剩余2条评论

0

我能做的最好的就是查看用户是否在开发工具中。这是我的代码:

<!DOCTYPE html>
<html>
    <body>
        <pre id="output"></pre>
        <script type="text/javascript">
            var element = new Image;
            var devtoolsOpen = false;
            element.__defineGetter__("id", function() {
                devtoolsOpen = true; // This only executes when devtools is open.
            });
            setInterval(function() {
                devtoolsOpen = false;
                console.log(element);
                if (devtoolsOpen == true) {
                    // run code if dev tool are open
                } // else here if you like to see if dev tools are not open
            }, 1000);
        </script>
    </body>
</html>

每秒钟它都会显示用户是否打开了开发工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接