如何使php脚本仅接受来自某个应用程序的数据

时间:2013-01-19 14:18:08

标签: php controls

我正在创建一个与我服务器上的php页面通信的应用程序。

通过该页面,我可以将分数设置到数据库中。

我使用post变量在db中存储分数,一切正常,但如果我使用wireshark分析我的游戏发送到页面的内容并且我用不同的数据重新执行POST请求,页面将存储该数据在db。

如何才能接受仅存储在游戏中的数据?

游戏是一个Java applet,服务器是用PHP编写的

1 个答案:

答案 0 :(得分:3)

您需要一种方法让php脚本知道收到的数据是真实的。

客户端

将要发送的所有数据连接成一个字符串。将字符串也放入当前日期和时间(客户端)。您也需要发送该信息。

然后用一些更多的数据“加盐”字符串,例如静态字符串“ xyw#q''wz ”,或者从发送的数据中获得更好的东西。

我们将该字符串称为 check-string

最后计算检查字符串的MD5哈希值,并将其与您的数据和当前日期和时间一起发送。

服务器端

php脚本接收所有数据和MD5哈希值。

对收到的数据(连接,腌制等)执行相同的操作以重新构建检查字符串,与客户端完全相同。

计算其MD5并比较两个哈希:收到的和正好计算的哈希值。

如果匹配,则数据是正版数据,可以添加到数据库中。否则它没有或已被重新发布。

-

<强>摘要

客户:数据 - &gt;构建字符串 - &gt;从字符串制作MD5 - &gt;发送数据&amp; MD5

服务器:数据(已接收) - &gt;构建字符串 - &gt;从字符串

制作MD5

(客户端MD5 ==服务器端MD5)?是数据正品:没有假货或重新发布

-

如何运作

对于任何数据集,只有一个有效的MD5哈希。如果有人想发布虚假数据,他也需要传递有效的MD5。但他不知道MD5是如何构建的。

为了让黑客更加努力,我告诉你用一些随机数据“加盐”字符串。

这只是实现你想要的一种方式(我认为更容易)。

请注意,如果客户端应用程序是用JavaScript(而不是Java)编写的,那么这种方法会非常容易受到攻击,因为JS代码会暴露出构建 check-string

作为最后一点:这不是防弹的。聪明的黑客仍然可以猜测如何构建检查字符串或反编译Java并(通过一些努力)找到检查字符串正在构建为他的假数据生成MD5。