当前位置: 首页 > 知识库问答 >
问题:

javascript - 如何禁止用户使用浏览器提供的隐藏元素设置?

顾昊穹
2024-01-26

在做网页水印,在做了各种的防止用户篡改之后,发现还有一个大招就是浏览器右键元素中有一个隐藏元素选项,请问应该如何禁止浏览器隐藏元素?或者说浏览器隐藏元素会触发哪些事件?或者说隐藏元素是修改了哪些样式?应该如何处理呢?

共有4个答案

董嘉祯
2024-01-26

只要他懂前端就没有办法完美的禁止, 即便是楼上说的循环创建标签也可以禁用js来实现删除水印的效果, 抖音搜 渡一 水印 ,有人专门讲过这个话题

尹承泽
2024-01-26

一个简单的办法,就是使用一直创建新标签,并且使用随机的标签名字。

比如 <xsad>水印</xsad><dfvv>水印</dfvv>,每次创建新元素的时候,删除掉前一个元素。

当然,也是有应对方法的

张璞
2024-01-26

首先你可以通过禁止打开控制台,防止别人进行代码调试,一般有以下方案
1、禁止右键查看源码和F12

//禁止F12键盘事件document.addEventListener('keydown', function(event){   return 123 != event.keyCode || (event.returnValue = false)});//禁止右键、选择、复制document.addEventListener(‘'contextmenu'’, function(event){   return event.returnValue = false})

2、通过页面宽度变化监测控制台
浏览宽高变化监测主要是监测浏览器可视区域的宽高:window.innerWidth / window.innerHeight(滚动条和内容区)和浏览器宽高:window.outerWidth / window.outerHeight(inner的基础上加上工具条的宽高)之间的差值。

因为我们不知道浏览器是否开启了工具条及工具条的宽高,所以我们设置一个阈值如200,如果outer – inner 大于200,我们就认为开启了控制台。

function resize(){    var threshold = 200;    var widthThreshold = window.outerWidth - window.innerWidth > threshold;    var heightThreshold = window.outerHeight - window.innerHeight > threshold;    if(widthThreshold || heightThreshold){        console.log('控制台打开了')    }}window.addEventListener('resize', resize);resize()

3、利用debugger的特性,无限递归
这个方法不能监测控制台被打开,但是能达到不让别人浏览你代码的目的。

上面也说了:debugger 语句调用任何可用的调试功能,可以阻断代码执行,如果没有调试功能可用,则此语句不起作用。

另外:每个浏览器都有其最大调用栈,如果超出就会抛出Maximum call stack size exceeded的错误并终止程序。

利用上面讲的特性组合成下面的代码:

function check() {    function doCheck(a) {        (function() {}["constructor"]("debugger")()); //debugger        doCheck(++a);    }    try {        doCheck(0)    } catch(err) {        console.log(err)    }};

上面代码check运行时,如果控制台未开启,debugger 不会起作用,但是doCheck会不断循环,直至爆栈,抛出错误,中止本次check运行;如果控制台开启,则会不断的进行断点调试和循环doCheck的调用,直至爆栈;如果控制台开启,但是取消了debugger调式,虽然此时debugger 不会起作用,但递归是依然存在的,而且此时网页性能与未开启控制台相比会大幅度下降,严重的话,可能会卡死浏览器。

但是总有破解方案,个人建议也可以考虑给整体转换成图片,这样用户就没办法单独去掉

冯驰
2024-01-26

在浏览器中,用户可以使用右键菜单来隐藏或显示网页中的元素。这通常是由于浏览器提供的开发者工具提供的选项。对于禁止用户使用这种功能,你需要进行一些防御性的编程。但请注意,完全阻止用户修改网页内容几乎是不可能的,因为用户有权选择他们如何查看和使用网页。

然而,你可以采取一些措施来降低用户隐藏或修改网页内容的可能性:

  1. JavaScript 事件监听:你可以监听网页中的各种事件,例如右键点击事件,然后阻止默认行为或取消事件的进一步传播。例如,你可以监听 contextmenu 事件并取消它:
document.addEventListener('contextmenu', function(e) {    e.preventDefault();});

这会阻止右键菜单的显示。但请注意,用户可以通过按快捷键(通常是 Ctrl + Shift + IF12)来打开开发者工具并手动执行这些操作。

  1. CSS 属性:你可以尝试使用 CSS 来防止某些元素被隐藏。例如,你可以设置元素的 user-select 属性为 none 来防止文本被选中,或者设置 pointer-eventsnone 来防止元素被点击。但是,这些方法并不适用于阻止浏览器隐藏元素功能。
  2. 防止 CSS 修改:你可以使用 JavaScript 来动态修改网页的 CSS,使其难以被用户修改。例如,你可以动态地添加或删除类名或内联样式。但是,这种方法也有其局限性,因为用户仍然可以通过开发者工具来修改样式。
  3. 内容安全策略 (CSP):CSP 是一种安全机制,可以限制网页中的脚本和样式来源。这可以防止某些类型的跨站脚本攻击 (XSS),但它并不能防止用户修改网页内容。
  4. 服务端验证:最后,你还可以在服务器端进行验证。即使用户修改了网页内容,你也可以在提交数据到服务器时进行检查,并拒绝不符合预期的请求。

总的来说,你应该意识到你不能完全阻止用户修改网页内容。你的目标应该是使网页尽可能地难以被篡改,同时提供一种方法让用户能够反馈或报告任何可疑的活动。

 类似资料:
  • 问题内容: 这应该工作: 它可以在Firefox中运行,但不能在Chrome中运行(可能未在IE中运行,未经测试)。 一个更有趣的示例: 是将选项元素与DOM分离的唯一选择吗?我需要稍后再显示给他们,所以这不会很有效。 问题答案: 不幸的是,您不能在所有浏览器中隐藏元素。 在过去,当我需要这样做时,我就设置了它们的属性,就像这样… 然后,我使用了这段CSS,在浏览器中支持隐藏的位置…

  • 本文向大家介绍如何禁止浏览器使用后退按钮功能,包括了如何禁止浏览器使用后退按钮功能的使用技巧和注意事项,需要的朋友参考一下 本文介绍可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适用场合。 一、概述    曾经有许多人问起,“怎样才能‘禁用'浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏览过的页面?”在ASP论坛上,这个问题也是问得最多的问题之一。遗憾的是,答案非常

  • 目前,我正在创建一个基于bootstrap4的站点,并希望为移动设备对此进行优化。对于某些屏幕尺寸,如何不显示元素? 通常情况下,我使用"。隐藏-sm-down",如下所示:https://v4-alpha.getbootstrap.com/layout/responsive-utilities/ 我还尝试了其他方法,如:。没有。d-md-block。d-xl-无或隐藏。 当前,可以使用隐藏元素。

  • 问题内容: 我想使用JavaScript禁用浏览器刷新。 当前,我正在使用,并且我不希望在用户刷新浏览器时调用它。 最好的方法是什么? 问题答案: 更新 最近的评论声称这在新的Chrome中不起作用…如jsFiddle所示,并在我的个人网站上进行了测试,此方法从Chrome版本开始仍然有效 顺便说一下,这在jQuery中非常容易: 附带说明:这只会禁用键盘上的f5按钮。要真正禁用刷新,您必须使用服

  • 问题内容: 问题:用户从小程序开始长时间操作;显示带有进度条的JDialog。用户打开/切换到另一个浏览器选项卡-仍然显示JDialog(并惹恼用户)。 当用户切换到另一个选项卡时,JDialog应该被隐藏;并在用户切换回时再次显示。 注意:我看到了类似问题的问题,解决方案是添加windowActivated / deactivated监听器。它对我不起作用,因为窗口中有多个框架,其中一个框架包含

  • 问题内容: 我正在用php做在线测验应用程序。我想限制用户再次参加考试。我尝试了以下脚本,但是它停止了我的计时器。我该怎么办? 我已经包含了源代码。计时器存储在cdtimer.js中 我有一个考试计时器,该计时器从 mysql 值中获取考试时间。计时器相应地启动,但是当我放入用于禁用后退按钮的代码时,计时器停止。我怎么了 问题答案: 有许多原因导致禁用后退按钮无法真正起作用。最好的选择是警告用户: