2016-07-27 68 views
-1

我对网络开发相当陌生,最近终于设法使用JavaScript编写简单的在线游戏。我用来管理高分系统的原始方法是在提交到php脚本(即javascript> HTML(表单)> PHP> DB)之前将一系列javascript变量传递到HTML表单中:Javascript游戏黑客预防

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 vars)而不必重新编码php中的所有内容?还是有一些其他的标准解决方法呢?

任何帮助,非常感谢!

+3

的JavaScript/HTML需要可以看出通过浏览器进行渲染和访问,因此没有确保这些的方法。你可以通过模糊处理来寻求安全性,但这通常不太适用。 –

+0

没有办法保护html和js,因为它在客户端呈现,但为了防止恶意表单提交,您可以使用CSRF令牌,并且还有很多其他方法可以防止恶意输入。 –

+4

相关阅读:http://stackoverflow.com/questions/3531968/why-is-client-side-validation-a-security-risk-as-opposed-to-server-side-validati http://stackoverflow.com/questions/13942498/should-you-validate-server-side-if-youre-validating-client-side - 尤其是第二个。 “绝对不要相信任何来自浏览器的内容。”用户可以完全控制浏览器。他们可以欺骗任何东西。 – Sumurai8

回答

-2

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

您可以使用散列+盐值对分数进行加密,生成唯一的随机数值,然后将散列,分数和随机数发送给您的验证者。

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

希望有一点道理。

JavaScript没有任何本地哈希算法,所以你可以使用像JS库做你的哈希:

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