2010-11-07 105 views
4

我想知道是否有一种方法来防止用户修改其jQuery或JavaScript的HTML页面来更改其行为。如何防止HTML/JavaScript代码修改

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

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

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

非常感谢。

+0

你可以有一个相同的域名要求,所以它似乎是可行的。奇怪的是,客户端JavaScript一旦改变,就会被解释为来自同一个域,而不是客户端主机,而客户端文件被解释为来自不同的域。 – JVE999 2014-07-16 11:24:43

回答

1

这是不可能的。当您向客户端发送代码时,客户端可以查看并修改它。只有在你的服务器上运行的代码才能被保护。

7

这是不可能的(这是一个很好的)。

+0

如果内容已发送给用户,则不可能。看到我的答案替代。 – 2010-11-07 18:19:06

+0

@Alin Purcaru:或者你或我的问题不对。对于我的理解,问题是,如果有办法完全阻止用户看到你的script/html/whatever,这根本不可能。即使是防止按键和东西,最后任何想看你的代码的人都会看到它。 – jAndy 2010-11-07 18:28:24

+0

我可能把问题弄错了。事实上,他问他是否可以对收到的内容强制执行用户行为。这是不可能的。即使我们假设浏览器允许这样的限制,知识渊博的用户也总是可以伪造浏览器请求。在我的回答中,我试图提供一个替代方案,而不是解决他的问题。 – 2010-11-07 18:33:15

0

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

+0

这可以被欺骗。客户端可以在与页面混淆的连接中放置一个过滤代理。这是不可能的。 – thejh 2010-11-07 18:17:40

4

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

用户的浏览器收到的所有内容都属于用户,因此您无法执行任何操作。

+4

其中包括用户在服务器上进行验证的响应。 – thejh 2010-11-07 18:18:17

5

要打败这个问题所描述的方法:

  • 您可以使用键盘快捷键来控制台/工具(按Ctrl + + 在Chrome)
  • 你可以使用资源/网络面板查看来源
  • 您可以在任何其他级别看到它,例如提琴手
  • 您可以使用书签,方便使用

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

2

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

可能检测到Firebug和其他人使用的对象console,但是一旦您获得了该信息,您的网站会如何处理这些信息?您不能禁用萤火虫或防止它被使用,甚至不知道它是否已被使用。

底线是,一旦网页和javscript代码已经发送到浏览器,它是超出你的控制。

最接近你想要的是将你的一些代码从Javascript中移出来,并送到服务器,在那里它将不可被用户接触到。但是,您仍然必须拥有一些客户端代码,这些代码仍然受到恶意用户的支配。

另一种选择是移动到Flash或类似的地方,最终用户不能直接访问代码或对象模型。尽管如此,它还是有其自身的缺点,并且你会忽略这个趋势,即从Flash向HTML5和Javascript转移。

2

当然,您无法阻止任何人做他想做的事,但是您可以使更改变得更加困难。请看DOMEvents,特别是突变事件。 这些让你能够看到什么东西有变化(属性,删除/插入节点,文本节点中的数据...)。例如,如果发生这种情况,您可以构建一个函数,用于监视一些您不需要更改并重新加载页面的特殊属性。

0

使用ajax获取远程信息不要向用户发送所有信息,例如民意测验答案等等,等他从服务器使用ajax选择了一个选项后得到答案。客户端验证永远不会是一件好事,那就是我如何删除其他愚蠢的人们的数据库,因为除非人们正确地学习了事情是如何工作的,否则他们应该受到困难的教导,比如在根访问漏洞的情况下丢失所有东西。

我不知道为什么HTML必须被阻止,因为浏览器出来以后就没有被封锁,我可以使用套接字制作我自己的浏览器,并将HTML传输到某些文本框并在我的最爱中看到它记事本/编辑器等。

至于JavaScript,你可以简单地在浏览器地址栏中发送JavaScript命令(浏览器在支持黑客hehe方面多么方便,但它也用于与其他技术如闪存之间的inter-op通信,所以它具有一个邪恶/好的一面)

如果你不知道你可以只做

javascript: alert('hi'); 

,或者如果你的JavaScript游戏或者任何已在全球范围的变量,你可以很容易地修改EM

javascript: score=9999;damage=99999; 

等等等等就像我说的这一切都很好它处理掉不好的程序员,并得到EM解雇或教他们一个教训在将来。

我见过很多大网站仍然属于一个简单的XSS攻击(跨站脚本),这是刚刚莫名其妙这些程序员如何找到一份工作,我会做一个更好的访谈或一些狗屎这是荒谬的