我一直收到来自我的web应用程序的意外数据。黑客可以更改javascript函数中的值吗?
如果我的代码是:
my_function('new_item',10,20,30,40);是否可能'new_item‘参数已被篡改?我能做些什么来防止这种情况发生?
发布于 2012-08-26 01:21:37
是的,任何用户都可以更改你发送给他们的浏览器的任何JavaScript --“黑客”这个词被夸大了,因为即使是一个中等水平的用户也完全有能力使用火狐的Firebug或者Chrome/Safari的常用文档检查器来拆分。这就是web开发人员重复公理的原因:
从不信任用户输入!
在任何情况下,您都不应该信任用户发送的任何内容。不要在数据库中插入任何内容,除非会话是可验证的,否则不要信任登录凭据。你信任的任何东西都是一个漏洞,每个漏洞总有一天会被利用。
不要试图保护你的JavaScript,这是不可能的。相反,应该验证用户尝试执行的所有操作:如果用户请求了他们不允许查看的页面,即使JavaScript请求,也不要将其提供给客户端。
发布于 2012-08-26 01:22:28
你无法确保你所有的客户端代码都是安全的,有一些方法你可以让它变得更难,但它们根本没有任何帮助,因为更高级的黑客很容易被通过。
例如,如果您使用
<script></script>标记通过其他文档链接到您的代码中。例如,你可以说有4个脚本。脚本1、2和3相互链接,直到它们到达4,这是主要函数的位置。这不会阻止任何事情,它只会让初学者“黑客”/篡改人更难。-但它只在chrome的javascript控制台上有效。Firebug并不关心脚本在DOM上的位置。因此,它只是证明了,与其花时间试图完全隐藏你的javascript代码,或者试图完全保护它(这是),你应该花时间在后端验证东西。
请记住,没有办法完全防止黑客篡改您的客户端代码。在客户端上信任任何东西都是不明智的。对于任何后端检查,PHP都能派上用场。还要确保防止PHP中的SQL注入。但不要因为你使用了mysql_real_escape_string()乙醚就认为你很安全。在这里阅读更多:SQL injection that gets around mysql_real_escape_string(),我个人推荐你的db代码使用PDO。
只需将您的服务器端代码(如PHP)视为主城堡的护城河。现在,可以将客户端代码看作是护城河周围的木栅栏。任何士兵都可以轻易地推倒木制栅栏,但他们必须挖到护城河才能到达你的keep -(他们必须通过PHP验证),如果护城河是无人看守的(没有PHP验证变量),那么士兵可以在没有人查看的情况下挖出护城河。
^现在把它想象成你的网站的样子。护城河容易被挖掘吗?如果是这样的话,在那里找一些守卫(-make确信你已经确保了php的有效性)。
当涉及到客户端时,你永远不应该相信任何东西。那道木栅栏从来都没有保护措施。即使是javascript卫士也不能保护它。
我对这个答案做了很多修改,因为一开始我并不清楚我真正的意思是什么。
https://stackoverflow.com/questions/12124065
复制相似问题