6

我一直在从我的网络应用程序接收到意外数据。黑客可以更改 javascript 函数中的值吗?

如果我的代码是:

my_function('new_item',10,20,30,40);

'new_item' 参数是否有可能被篡改?我能做些什么来防止这种情况发生?

4

2 回答 2

9

是的,任何用户都可以更改您发送到他们浏览器的任何 JavaScript ——“黑客”这个词被夸大了,因为即使是一个中等程度的用户也完全有能力使用 Firefox 的 Firebug 或 Chrome/Safari 的库存文档检查器来破解。这就是 Web 开发人员重复公理的原因:

永远不要相信用户输入!

在任何情况下,您都不应信任用户发送的任何内容。不要在没有转义的情况下向数据库中插入任何内容,除非会话是可验证的,否则不要信任登录凭据。你信任的任何东西都是一个漏洞,每个漏洞总有一天会被利用。

不要试图保护你的 JavaScript,那是不可能的。相反,验证用户尝试做的所有事情:如果他们请求一个他们不允许看到的页面,即使 JavaScript 请求它也不要将其提供给客户端。

于 2012-08-25T17:21:36.933 回答
-2

您无法确保所有客户端代码的安全,您可以采取一些方法来帮助提高难度,但它们根本没有帮助,因为更高级的黑客可以轻松获得通过了。

例如,如果您使用

<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.]

于 2012-08-25T17:22:27.980 回答