我一直在从我的网络应用程序接收到意外数据。黑客可以更改 javascript 函数中的值吗?
如果我的代码是:
my_function('new_item',10,20,30,40);
'new_item' 参数是否有可能被篡改?我能做些什么来防止这种情况发生?
我一直在从我的网络应用程序接收到意外数据。黑客可以更改 javascript 函数中的值吗?
如果我的代码是:
my_function('new_item',10,20,30,40);
'new_item' 参数是否有可能被篡改?我能做些什么来防止这种情况发生?
是的,任何用户都可以更改您发送到他们浏览器的任何 JavaScript ——“黑客”这个词被夸大了,因为即使是一个中等程度的用户也完全有能力使用 Firefox 的 Firebug 或 Chrome/Safari 的库存文档检查器来破解。这就是 Web 开发人员重复公理的原因:
永远不要相信用户输入!
在任何情况下,您都不应信任用户发送的任何内容。不要在没有转义的情况下向数据库中插入任何内容,除非会话是可验证的,否则不要信任登录凭据。你信任的任何东西都是一个漏洞,每个漏洞总有一天会被利用。
不要试图保护你的 JavaScript,那是不可能的。相反,验证用户尝试做的所有事情:如果他们请求一个他们不允许看到的页面,即使 JavaScript 请求它也不要将其提供给客户端。
您无法确保所有客户端代码的安全,您可以采取一些方法来帮助提高难度,但它们根本没有帮助,因为更高级的黑客可以轻松获得通过了。
例如,如果您使用
<script></script>
通过其他文档链接代码的标签。例如,您可以说有 4 个脚本。脚本 1,2 和 3 相互链接,直到它们到达主要功能所在的 4。这不会阻止任何事情,只会让初学者“黑客”/篡改者变得更加困难。- 但它只在 chrome 的 javascript 控制台上最有效。Firebug 不关心脚本在 DOM 上的位置。因此,它只是证明,与其花时间尝试隐藏您的 javascript 代码或尝试完全保护它(这是不可能的),不如花时间在后端验证事物。
请记住,没有办法完全防止黑客篡改您的客户端代码。信任客户端的任何东西永远都不明智。PHP 可以非常方便地进行任何后端检查。还要确保防止 PHP 中的 SQL 注入。但是不要仅仅因为你使用了mysql_real_escape_string()
以太而认为你的安全。在此处阅读有关此内容的更多信息:绕过 mysql_real_escape_string() 的 SQL 注入,我个人建议将 PDO 用于您的数据库代码。
只需将您的服务器端代码(如 PHP)想象为主要城堡的护城河。现在把客户端代码想象成护城河周围的木栅栏。任何士兵都可以轻松推倒木栅栏,但如果护城河无人看守(没有 PHP 验证变量)然后士兵可以在没有人看的情况下挖掘。
^ 现在想想你的网站是怎样的。护城河是否容易挖掘?如果是这样,请在那里派一些警卫(-确保您已确保 php 验证。)
当涉及到客户端时,你永远不应该相信任何东西。那个木栅栏永远没有保护措施。即使是 javascript 守卫也无法保护它。
[I've edited this answer a lot, because at first I was very unclear of what I actually meant.]