如何防止 html/JavaScript 代码修改

IT技术 javascript jquery html security
2021-03-20 07:30:50

我想知道是否有办法防止用户修改带有 jQ​​uery 或 javascript 的 html 页面以更改其行为。

用户可以使用 FireBug 或 Google Chrome 开发人员栏等工具对其进行修改,以隐藏或显示 div,向页面元素添加事件侦听器等。

我已经看到一些网页在加载页面时显示阻塞的 div 和一个弹出窗口来回答一些问题。如果你回答它,div隐藏,你可以正常看到页面。但是,如果您尝试使用 FireBug 隐藏阻止 div,页面会重新加载,并且如果您不回答弹出窗口中提出的问题,则无法正确查看页面。

我想知道如何防止用户做这样的事情。

非常感谢。

6个回答

这是不可能的(这是一件非常好的事情)。

如果内容已经发送给用户,这是不可能的。请参阅我的答案以获取替代方案。
2021-04-24 07:30:50
@Alin Purcaru:那时你或我的问题都错了。根据我的理解,问题是,是否有办法完全阻止用户查看您的脚本/html/任何内容,这根本不可能。即使防止按键和其他东西,最终任何想要查看您的代码的人都会看到它。
2021-05-14 07:30:50
我可能问错了问题。事实上,他问他是否可以对接收到的内容强制执行用户行为。这是不可能的。即使我们假设浏览器允许此类限制,知识渊博的用户也总是可以伪造浏览器请求。在我的回答中,我试图为他的问题提供替代方案而不是解决方案。
2021-05-20 07:30:50

要击败问题中描述的方法:

  • 您可以使用控制台/工具的键盘快捷键(Chrome 中的Ctrl+ Shift+ I
  • 可以使用resource/net面板查看源码
  • 您可以在任何其他级别看到它,例如 Fiddler
  • 您可以使用书签来更轻松地访问

,你不能阻止人们看到或修改你的源代码/脚本,如果他们想......你最想阻止的人最有能力规避任何威慑(这就是你所做一切威慑,而不是一个停止)你放置到位。

唯一的方法(在我看来)是在用户执行您想要的操作之前不加载页面内容。在他回答问题(或其他任何问题)后,您发送内容的 AJAX 请求(当然,正如 thejh 所说,您还应该在服务器上验证答案,最好在同一请求中)。因此,您加载页面标题、横幅和任何不重要的内容,但在用户执行您的操作之前不应加载实际内容(例如博客上的文章)。

用户浏览器收到的所有内容都属于该用户,因此您无法对其进行任何强制执行。

其中包括用户在服务器上进行验证的响应。
2021-04-23 07:30:50

当然,你不能阻止任何人做他想做的事,但你可以让改变变得更加困难。

看看DOMEvents,尤其是 Mutation-Events。这些使您能够查看某些内容何时发生变化(属性、删除/插入的节点、文本节点中的数据......)。例如,您可以构建一个函数来监视某些特殊属性,如果发生这种情况,您无需更改和重新加载页面。

这实际上是实现它的明智方法。为了避免刷新页面,我会简单地存储最新的内容,如果检测到任何意外更改,则用它替换元素。就像版本控制一样。
2021-05-12 07:30:50

正如其他人已经说过的那样,无法控制最终用户对您发送给他们的数据的处理方式。

也许可以检测console到 Firebug 和其他人使用对象,但是一旦您获得了这些信息,您的站点可以用它做什么?您无法禁用 firebug 或阻止它被使用,甚至无法知道它是否已被使用。

最重要的是,一旦将网页和 javscript 代码发送到浏览器,它就不受您的控制。

最接近您想要的东西是将您的一些代码从 Javascript 中移出到服务器,在那里用户将无法访问它。但是,您仍然必须拥有一些客户端代码,这些代码仍将受到恶意用户的支配。

另一种选择是转移到 Flash 或类似的东西,最终用户无法直接访问代码或对象模型。不过,这有其自身的缺点,而且您会逆势而上,即从 Flash 转向 HTML5 和 Javascript。