我对网络开发很陌生,最近终于设法使用javascript编写一个简单的在线游戏。我用来管理高分系统的原始方法是在提交到php脚本(即javascript> HTML(表单)> PHP> DB)之前将一系列javascript vars传递给HTML表单:
使用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中重新编码所有内容?或者还有其他一些标准的解决方法吗?
非常感谢任何帮助!
答案 0 :(得分:-2)
您可以生成某种哈希和随机数密钥算法来发送您的验证页面。
您可以使用hash + salt值对分数进行加密,生成唯一的nonce值,然后将散列,分数和nonce发送给验证者。
在验证阶段,您使用salt +用户提交的分数重新生成哈希。如果两个哈希值相同,则接受分数。然后检查nonce值(一些随机数据位,如时间戳)以查看之前是否已发送散列(以阻止用户仅复制散列数据并重复发送),如果nonce是唯一的,则接受答案。
希望这有点意义。
JavaScript没有任何本机哈希算法,因此您可以使用JS库之类的东西进行哈希:
https://github.com/blueimp/JavaScript-MD5