【问题标题】:The best way to secure posting data to a URL from Java将数据从 Java 发布到 URL 的最佳方式
【发布时间】:2011-01-14 10:57:33
【问题描述】:

我正在为课程作业开发一个小游戏(用 Java 编写),我决定做的扩展是一个在线记分板。正如我认为可能发生的那样,我课程中的一些人已经想出了如何破解记分板并提交自己的分数。

我知道目前提交分数的方式存在一些问题,但就是这样。游戏生成一个分数,然后在 URL 上执行 HTTP GET,其中包含玩家 ID、分数和密码选项。

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

我不知道防止黑客入侵的最佳方法。我真的不介意,它不是那么重要,但是保护它会很好,所以当代码被标记时它不会有大量垃圾邮件。

您对混淆代码和/或保护整个过程的方法有何建议?

【问题讨论】:

  • POST 有什么问题?我认为,POST 会更适合!

标签: java https obfuscation


【解决方案1】:

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

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

其他一切都可以随时被黑客入侵。如果您不加密数据,则可以使用网络嗅探器对其进行黑客攻击。如果您使用 HTTPS,黑客可以使用代理来解码数据 (man in the middle attack)。

【讨论】:

  • 不需要中间人攻击 - 用户已经拥有客户端。他们可以直接破解客户来进行竞标...
  • 我的意思是你不需要破解或反编译客户端。只需安装代理,安装 SSL 证书并为客户端配置它。这样,客户端会将加密的数据发送到代理,代理将对其进行解码和重新编码。脚本小子级别。
  • 我知道服务器需要知道一切才能保证最安全。然而,这个问题的重点更多的是:用最少的工作量,什么是最有效的。我知道这让我听起来很懒惰,但这更多是因为课程截止日期。我想知道是否有什么简单的方法可以阻止大多数简单的攻击。无论如何感谢您的回答,中间人攻击的东西很有趣。
  • @danpalmer:你可以在客户端上做的所有事情都可以在几分钟内被熟练的黑客破解。但这里有一个建议:保持原样并为熟练的攻击奖励额外积分。我的意思是:你想教他们如何使用电脑。破解他人代码是一项宝贵的技能,特别是如果您想学习如何保护自己的代码。
【解决方案2】:

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

基本协议可以是使用会话密钥对记分板更改进行签名或加密。会话密钥是在播放器本身登录时创建的。在这里,您可以使用适当的身份验证系统进行工作。

现在至少您知道从哪个帐户进行了更改并且可以责怪您的学生...

【讨论】:

  • +1 好主意。如果你决定信任客户端(而不是在服务器端做所有事情),你至少想知道你信任谁......
  • 这是一个好主意,我非常喜欢这个并且可能会实现它。感谢您的想法。
【解决方案3】:

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

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

这样,例如,即使您的同事发送命令“set jeff score 9999”,服务器也会检查 jeff 是否真的玩过一个给他 9999 分的游戏,如果没有,您可以只显示一条错误消息客户。

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

【讨论】:

  • 不幸的是,整个课程都是关于制作一个仅限本地的游戏。扩展(仅价值 20%)是关于添加一些基本的额外功能。将逻辑放在服务器上需要相对较少的分数进行大量工作,并且服务器没有用 Java 实现,这是我们正在测试的东西。然而,我注意到所有这些对未来项目的建议。
猜你喜欢
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
相关资源
最近更新 更多