【问题标题】:Javascript game hack prevention [duplicate]Javascript游戏黑客预防[重复]
【发布时间】:2016-07-27 06:59:12
【问题描述】:

我对 Web 开发还很陌生,最近终于设法使用 javascript 编写了一个简单的在线游戏。我用来管理高分系统的原始方法是将一系列 javascript vars 传递到 HTML 表单中,然后再提交到 php 脚本(即 javascript > HTML(form) > PHP > DB):

Javascript:

var score = 345345; //score after playing game
document.theform.score.value = score;
document.theform.submit();

HTML:

<form name="theform" action="scorehandler.php" method="post">
    <input name="score" type="hidden" value="">
</form>

但是,使用此方法允许用户通过重新创建表单并自行提交来轻松破解。


我知道防止用户黑客攻击的常用方法可能是尽可能多地在服务器端进行编码(即使用 php 替换尽可能多的代码),但似乎它可能尤其是给游戏带来一些潜在问题(例如 php 的同步特性)

有没有办法以某种方式从客户端隐藏 html 表单(和相关的 javascript 变量),而无需在 php 中重新编码所有内容?或者还有其他一些标准的解决方法吗?

非常感谢任何帮助!

【问题讨论】:

  • Javascript/HTML 需要通过浏览器呈现和访问,因此没有保护这些的方法。您可以通过混淆来获得安全性,但这通常效果不佳。
  • 相关阅读:stackoverflow.com/questions/3531968/… stackoverflow.com/questions/13942498/… - 尤其是第二个。 “永远不要相信来自浏览器的任何东西。”用户可以完全控制他们的浏览器。他们可以欺骗任何东西。

标签: javascript php html security


【解决方案1】:

您可以生成某种散列和随机数密钥算法来发送您的验证页面。

您将使用哈希 + 盐值加密分数,生成唯一的随机数值,然后将哈希、分数和随机数发送给您的验证者。

在验证阶段,您使用盐 + 用户提交的分数重新生成哈希。如果两个哈希值相同,则接受分数。然后检查 nonce 值(一些随机数据,如时间戳)以查看之前是否已发送过哈希(以阻止用户仅复制哈希数据并重复发送它),如果 nonce 是唯一的,则接受答案。

希望这有点道理。

JavaScript 没有任何本机哈希算法,因此您可以使用 JS 库之类的东西进行哈希处理:

https://github.com/blueimp/JavaScript-MD5

【讨论】:

    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    相关资源
    最近更新 更多