1

这是一个 javascript 安全问题:假设一个页面找到了计算机的屏幕分辨率,例如 1024 x 768,并希望使用 AJAX 调用将此数据记录到数据库中。

有没有办法真正防止虚假数据输入数据库?我认为无论 HTML 或 Javascript 做什么,用户都可以对代码进行逆向工程,以便将一些假数字输入数据库,或者有没有办法完全防止它发生?(100% 安全)。

更新:或在类似的情况下...如果我编写一个简单的 javascript 游戏...有没有办法让用户通过 AJAX 发回分数并谎报他们的分数?

4

5 回答 5

5

如果您一开始就假设您正在与之通信的用户是恶意的,那么不;您无法控制他们传递给您的数据。当然不是 100% 确定的——在最坏的情况下,他们可以使用网络工具重写或用他们想要的任何内容替换任何“正确”的内容。

如果您只是想防止偶然的恶意行为,您可以混淆或加密您的代码和/或数据。这不会阻止坚定的攻击者。

如果您确实信任真实用户,但怀疑其他人可能试图冒充他们,您可以使用其他技术,例如动态金丝雀:向用户发送一个随机数,如果他们返回相同的数字给您,您就知道它真的来自他们。(或者你受到了中间人攻击,但是嘿;这就是 SSL 的用途。)

于 2009-05-25T23:02:01.090 回答
2

无法阻止用户从 JavaScript 发回他们喜欢的任何数字。

我认为您能做的最好的事情是在服务器端进行某种检查,以确保发回的数字看起来像一个现实的解决方案。

不过,我不确定为什么有人会首先花时间欺骗这些数字。

于 2009-05-25T22:41:08.107 回答
1

是的,你是对的。由于您使用的是客户端代码,因此您必须以一种或另一种方式告诉用户的计算机(以及用户),无论您使用的是什么加密或混淆。没有办法解决它。

于 2009-05-25T22:41:39.510 回答
1

对于决议,基本上不可能确定它是否是有效的决议。我的分辨率通常以5120 x 1600发送到服务器,这看起来很不现实,但这是因为2个屏幕经常被发送为1。否则,屏幕分辨率和屏幕配置的可能性很大,你' d 可能会删除很多有效的,尽管它们可能很少。

对于游戏分数,您可以进行额外的检查,使其检查更加复杂。诸如在整个游戏过程中发送多个分数通知并要求 X 号以确保收到的分数是有效的。(即,必须收到 200-300、400-500、700-800 之间的一个,然后是 1000 的最终分数。)有了最终分数,您还可以拥有某种只能使用一次或包含的加密值一些带有CRC的数据。基本上,最后,需要接收其他数据而不仅仅是分数,特别是对于更高的分数。

于 2009-05-25T23:00:54.370 回答
1

为了通过详细说明 Dok 和您自己的评论来尝试回答,操纵应用程序以“欺骗”某些东西之间存在明显的区别,无论是在线业务以获得更便宜的东西还是 MMPORG 获得更多经验, 而不是以不正确地呈现界面并降低该特定(黑客?)用户的整体用户体验的方式对其进行操作。

您最好将时间花在网站的其他方面。我不建议我网站的用户操纵 HTML 以使其在他们的机器上看起来很有趣,但我不会全力以赴并混淆我的服务器输出以阻止他们伤害自己。在您的情况下,针对预定义的安全值进行范围检查,利用数据库,以确保用户以“允许的”分辨率查看会给您的应用程序带来不必要的负担,并且需要时间来完成。

于 2009-05-25T23:02:51.697 回答