HTML表单post/get数据安全性



好吧,这个问题不是很清楚,因为我不能把它写成一个单独的问题。

我有一个游戏,我正在设计使用javascript,它基本上是一个多人游戏。假设有两个玩家,玩家黑魔王和天使

天使射击黑暗领主所以黑魔王损失1点生命。

现在发生的是,我使用ajax提交的生命的数量,黑暗主失去。请求是GET/shootout.php?shooter=darklord&life=-1所以这可以让我储存黑魔王的新生命。

现在的问题是,假设天使知道电脑,他开始请求/shootout.php?

因此黑魔王失去了比他应该拥有的更多的生命。所以天使在游戏中作弊了。

不,我想阻止这种请求,我正在试图找到一种方法,使我的请求可以隐藏。我知道我可以加密url。假设我加密了它,请求应该是GET/cn .php?E =934ufj30jf表示黑魔王失去一条命,而不同值的 E 表示天使失去一条命,或获得一分。然而,要做到这一点,我需要将数据发送到客户端,就像告诉javascript请求这个url一样。

现在用户可以很容易地读取文件的源代码,以便找出做某事的新请求,

我已经发现并想到了许多其他方法,但它们都限制了作弊的数量或影响了游戏玩法等。它们都不能完全消除这种安全性。

所以现在我的问题是我如何确保用户不发送不真实的数据。我怎样才能阻止他们作弊?我想过最好的方法是,我使用服务器端脚本来实际计算某人射击其他人的可能性,然后与客户端输入匹配,但这会影响执行时间,所以我试图找到其他方法,一些公钥加密??(问题是用户可以随心所欲地放置数据,然后对其进行加密)令牌?(问题是用户可以随心所欲地放入数据,然后放入当前令牌)

还有其他想法吗??

这不是关于隐藏请求,而是关于实现适当的访问控制。您的示例被称为不安全的直接对象引用,因为在与直接DB对象相关的查询字符串中操作值会导致意想不到的结果(请参阅OWASP十大。net开发人员的第4部分:不安全的直接对象引用)。

有几件事你可以做,但最重要的是实现适当的访问控制。您必须对服务的调用者进行身份验证,并授权他们执行所请求的活动(这一切都必须在服务器上进行)。在这种情况下,角度不应该能够执行一个行动代表黑暗领主。

你可以做的另一件事是使用一个间接的对象引用地图(参考上面的链接),它将玩家的id与加密强大的,特定于用户的替代品混淆起来。除了访问控制之外,你可能不需要这个,但它确实给了你更多的不可预测性。

最后,也考虑一下另一面——如果黑暗领主能够将伤害量作为参数传递,那么有什么能阻止他手动发出"生命=-100"的请求呢?这取决于执行攻击动作的具体方式,但你也要避免人们玩这个动作。

您必须假设用户完全控制客户端JavaScript。确保安全的唯一方法是在服务器端进行检查。

您不应该发送操作结果。你应该发送动作。即天使36角度从(7,15)点拍摄暗天使

服务器检查是否正确射击和减少黑暗领主

几年前就这个问题给出了一个很好的答案。它实际上指的是Flash而不是JavaScript,但安全问题和技术也将适用于这种情况。

阻止人们入侵基于php的Flash游戏高分表的最好方法是什么

你永远不应该让客户端告诉服务器在玩家状态下做什么改变。移除一定量的生命值),因为客户端可能总是在作弊。相反,只需让客户端告诉服务器玩家做了什么输入,然后服务器决定该输入的结果。

虽然这并不能通过编写一个自动玩游戏的机器人(并且比任何人类玩家都更擅长游戏)来消除作弊的可能性,但你至少可以消除"我造成了10,000伤害,相信我"这种明显的作弊行为。

检测机器人最好通过跟踪行为数据和进行数据挖掘来找到作弊者。如果机器人和人类玩家之间没有行为差异,那么谁会关心机器人呢?

最新更新