如何防止html/JavaScript代码修改

如何防止html/JavaScript代码修改,javascript,jquery,html,security,Javascript,Jquery,Html,Security,我想知道是否有办法防止用户修改带有jQuery或javascript的html页面来改变其行为 用户可以使用FireBug或Google Chrome开发者栏等工具对其进行修改,以隐藏或显示div,向页面元素添加事件侦听器等 我看到一些网页在加载页面时显示一个阻塞div,并弹出一个提示回答一些问题。如果您回答它,div将隐藏,您可以正常地看到页面。 但是,如果您试图使用FireBug隐藏阻塞div,页面将重新加载,如果您不回答弹出窗口中提出的问题,则无法正确查看页面 我想知道如何防止用户做这样的

我想知道是否有办法防止用户修改带有jQuery或javascript的html页面来改变其行为

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

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

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


非常感谢。

这是不可能的。当您向客户机发送代码时,客户机可以查看并修改代码。只有在您的服务器上运行的代码才受到保护,不受此影响。

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

我认为这是不可能的,除非您可以确保(或强制)用户使用没有开发工具的浏览器。

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


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

要克服问题中描述的方法:

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

,你不能阻止人们看到或修改你的源代码/脚本,如果他们愿意的话……你最想阻止的人是最能够绕过你设置的任何威慑的人(这就是你所做的一切,威慑,而不是阻止)。

正如其他人所说,无法控制最终用户对您发送给他们的数据所做的操作

可能可以检测Firebug和其他人使用的
控制台
对象,但是一旦获得这些信息,您的站点可以如何处理这些信息呢?您无法禁用firebug或阻止它被使用,甚至无法知道它是否已被使用

底线是,一旦网页和脚本代码被发送到浏览器,它就失去了您的控制

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


另一种选择是使用Flash或类似的工具,最终用户无法直接访问代码或对象模型。不过,这也有其自身的缺点,你会逆势而行,从Flash转向HTML5和Javascript。

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

看一看这些变化,尤其是突变事件。
这些功能使您能够看到某些内容何时发生了更改(属性、删除/插入的节点、textnodes中的数据…)。例如,您可以构建一个函数来监视一些特殊属性,如果发生这种情况,您不必更改这些属性并重新加载页面。

使用ajax获取远程信息不要向用户发送所有信息,例如投票答案等。例如,在用户从服务器选择后,使用ajax获取答案。客户端验证从来都不是一件好事,这就是我过去删除其他愚蠢的人的数据库的方式,因此除非人们正确地了解事情的实际工作原理,否则他们应该接受艰苦的教育,例如在根访问漏洞的情况下丢失所有东西

我不知道为什么HTML必须被阻止自从浏览器问世后它就没有被阻止他会说我可以用一个插座制作自己的浏览器,让HTML直接传输到某个文本框,并在我最喜欢的记事本/编辑器中看到它等等

至于javascript,您只需在浏览器地址栏中发送javascript命令即可(浏览器支持黑客是多么方便啊呵呵,但它也用于与其他技术(如flash)的交互通信,因此它具有邪恶/善良的一面。)

如果你不知道你能做什么

javascript: alert('hi');
或者,如果您的javascript游戏或任何东西具有全局范围的变量,您可以轻松地修改它们

javascript: score=9999;damage=99999;
等等,就像我说的,这一切都是好的,它淘汰了坏程序员,让他们被解雇,或者在将来给他们上一课


我已经看到许多大型网站仍然遭受简单的XSS攻击(跨站点脚本),这让这些程序员很难找到工作,我会做一个更好的面试或者一些狗屎,这很荒谬,可以被欺骗。客户端可以在连接中放置一个过滤代理,这会扰乱页面。不可能。这包括服务器上用于验证的用户响应。如果内容已发送给用户,则不可能。请看我的回答,以获得另一种选择。@Alin Purcaru:那不是你错了,就是我错了。据我所知,问题是,是否有办法完全阻止用户看到您的脚本/html/什么的,这是根本不可能的。即使防止了按键之类的事情,最后任何想看你的代码的人都会看到。我可能把问题搞错了。事实上,他问是否可以强制用户行为