确保将数据发布到来自Java的URL的最佳方式

问题描述:

我正在为一门课程开发一个小型游戏(用Java编写),而我决定要做的扩展是一个在线评分板。正如我想的那样,我的课程中有几个人已经想出了如何破解记分牌并提交他们自己的分数。确保将数据发布到来自Java的URL的最佳方式

我知道目前提交分数的方法存在一些问题,但在这里。游戏会生成一个分数,然后通过玩家ID,分数和密码的选项在URL上进行HTTP GET。

我可能会将其更改为POST,因为获取密码的数据可能会更困难。另外,我正在考虑让它通过HTTPS运行(尽管我不知道这在Java中是否更困难)。不幸的是,这并不能阻止人们通过反编译Java代码找到密码的主要方式。

我不知道防止黑客入侵的最佳方法。我并不介意太多,它并不那么重要,但是确保它是很好的,所以当代码被标记时它就没有垃圾信息。

对于混淆代码和/或确保整个过程的方式,您有什么建议?

+0

POST有什么问题?我认为,POST会更适合! – 2011-01-14 11:05:17

可以做的是从匿名变为基于用户的追踪。这并不能防止伪造,但使其更易于追踪。

基本协议可能是记分板更改使用会话密钥进行签名或加密。会话密钥是在玩家本身登录时创建的。在这里你可以使用适当的认证系统。

现在至少你知道哪个帐户中的变化已经取得并能怪你的学生......

你的方法根本行不通。当你需要确保某些东西时,你不能在客户端上运行它。

相反,整个游戏必须在服务器上运行,用户只能提交移动。这样,您可以验证这些动作(因此玩家不能创建非法状态)并计算正确的分数。

其他一切都可以被黑客入侵。如果你不加密数据,它可以通过使用网络嗅探器来入侵。如果您使用HTTPS,黑客可以使用代理来解码数据(man in the middle attack)。

+2

没有必要进行中间人攻击 - 用户已经拥有客户端。他们只需要破解客户端即可进行出价... – sleske 2011-01-14 11:21:46

+1

我的意思是说,您不需要破解或反编译客户端。只需安装代理,安装SSL证书并为客户端进行配置即可。这样,客户端就会将加密的数据发送给代理,代理将对其进行解码和重新编码。脚本 - kiddy级别。 – 2011-01-14 13:29:32

+0

我知道服务器需要知道一切,因为它是最安全的。然而,这个问题的重点更多:以最少的工作量最有效的是什么。我知道这让我听起来很懒,但更多的是因为课程的最后期限。我想知道是否有任何简单的事情可以阻止大多数简单的攻击。无论如何,感谢您的答案,中间人攻击的东西很有趣。 – danpalmer 2011-01-15 15:47:14

混淆不会帮你。 这只会让黑客更难,但肯定还是有可能的。

为了确保整个过程(至少在某种程度上),您不应该在客户端上有任何游戏逻辑代码。客户端只能将游戏命令发送到服务器。在接收到命令后,服务器应该检查用户是否可以执行给定的命令。

例如,即使您的同事发送命令“设置杰夫分数9999”,服务器也会检查jeff是否真的玩过一个给他9999分的游戏,如果不是,您可以只显示错误消息在客户端。

一般规则是:如果客户端上有东西,客户端可以修改它。大多数人认为企图让客户难以修改它是徒劳的,因为这只是时间问题。