一些站长似乎热衷于阻止用户使用浏览器的开发者工具,理由通常是不希望网站的资产被盗用、样式被抄袭等等。这么做非但是掩耳盗铃、防君子不防小人的,更是存在激怒正常来访的用户的可能。
你到底防了个什么
浏览器的运行机制决定了发送到客户端的所有网页源代码都必然是公开的。用户有一万种方法查看运行在他们浏览器上的脚本、样式和多媒体资源,这一切都不需要经过开发者的允许。开发者在上线网站时就默认公开了它所发布的所有源码。
而任何尝试阻止用户这么做的行为,首先在技术上就是无济于事的。常见的禁用开发者工具手段有:
-
禁用 F12 等快捷键
解:在进入页面前打开 / 通过浏览器菜单打开
-
无限循环
debugger
解:停用断点 - Ctrl F8
-
无限清除控制台
解:控制台设置 -> 保留日志 / 油猴脚本劫持
Console
原型 -
解:逆向并修改对应的检测代码
此外对于 SSR 或 SSG 类型的站点,还可以大道至简直接禁用 JS。即使是必须要使用 JS 来初始化页面并且混淆了源码的站点,也有像 Wakaru 这样的项目来帮助我们逆向源码。
总而言之,无论对于哪种拦截方式,都有对应的解法来绕过这些检测。反过来讲,它们最终只是防住了懒得特地绕开检测来欣赏你写的大份的人而已。
你真正防住了什么
开发者工具并不只有查看源码这一条用途。
我们有网络选项卡,可以在页面加载卡顿时检查是哪些资源出了问题。这并不只是在调试自己网站时才能尝试的操作,对其他网站进行这样的性能观察同样是一种学习的方式。
我们有性能和性能监视器选项卡,可以查看某一段时间网站运行了什么样的代码,消耗了多少 CPU 和内存资源,这有助于排查浏览器的性能问题。
我们还有控制台选项卡,它不仅是当前网页的 CLI,更是一个完整的 JavaScript 运行时交互窗口:即使我在某个页面中打开了控制台,也不代表我打算 Hack 这个网站。我只是偶然有了关于某些代码片段的想法,然后随机切换到了某个打开的标签页而已。
说到底,从一开始就把用户定位为可能窃取代码的假想敌,本来就是一种不尊重用户的表现。它更多地防住了那些希望借助开发者工具来学习和交流技术的人,而在被这些拙劣的技巧拦在门外后,他们很快会丧失继续浏览这个网站的兴趣。你写的代码还没有独特到需要用户消耗额外的精力来一探究竟。
你没有资格这么做
就像标签页和地址栏一样,开发者工具同样属于浏览器的一部分,是用户安装浏览器时默认获得的能力,而不是站点的私有资源。阻止用户使用开发者工具,本质上是一种对用户合法权益的侵害。网站没有任何正当的理由得知我们是否打开了开发者工具,也没有资格阻止我们这么做。
试想,如果一个网站阻止我们修改地址栏上的文本,在试图跳转到其他网站时重定向到自己的网站,它会给用户带来怎样的体验?这和对开发者工具的拦截没什么实质性的不同,病娇和敏感肌的区别罢了。
以这种视角来重新审视上述情况,就不难觉得这是一种冒犯他人的行为了。你既没有藏住任何东西,还让自己的心虚显露无遗,同时甚至惹恼了潜在的长期用户,这种一举两失的做法实在称不上是值得提倡的。
评论0