将游戏分数从客户端更新到服务器数据库的最安全方法?Javascript

Safest way to update game score from client to server database? Javascript(将游戏分数从客户端更新到服务器数据库的最安全方法?Javascript)
本文介绍了将游戏分数从客户端更新到服务器数据库的最安全方法?Javascript的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

所以我有这个完全在客户端上运行的游戏.除了下载初始脚本来玩游戏之外,没有任何服务器交互.无论如何,在游戏结束时,我希望客户端将分数发回给我,这些分数应该在服务器数据库中更新.现在我已经开始接受这样一个事实,即在地球上我无法向黑客隐藏这一点并原封不动地发送分数.但我想知道我可以修改整个过程到什么级别,这对于黑客操纵正在发送的数据来说实际上变得非常不可行.当然,我不希望从客户端机器以纯文本形式发送分数,也不希望我的服务器执行复杂的解密算法.因此,实现相当大的安全性的最佳方法是什么,每个汤姆迪克和哈利都不会破坏分数......我希望有人可以提供一个不错的小方法,我可以继续工作...... :) 谢谢

So I have this game that is completely run on the client. No server interaction what so ever apart from downloading the initial scripts to play the game. Anyway at the end of the game I would like for the client to send me back the scores which should be updated in the server database. Now I have come to accept the fact that there is no way on earth I can hide this from a hacker and send the scores unaltered. But I would like to know till what level can I modify the whole process that it virtually becomes pretty infeasible for the hacker manipulate the data which is being sent. For sure I would not like the score to be sent as plain text from client machine and I don't want my server to perform complex decryption algorithm. What is the best way hence to achieve considerable amount of security that every tom dick and harry doesn't hack the scores... I hope someone could provide a nice little way that I could work on... :) Thanks

所以我的理想结果应该是 ->由不受信任的一方(玩家)进行的(得分)计算得出可信的结果!

So my ideal result should be -> have trusted result from a calculation (of score) made by an untrusted party (the player)!

-编辑-

有人告诉我有关将数据隐藏在图片获取请求中的信息.就像,我正在画布(html5)上实现这个游戏.所以他在游戏结束时让我从我的服务器获取游戏结束图像,他们请求应该包含散列分数.我没有完全理解完整的过程,但如果你能解释一下,我会很高兴!:)

Someone told me something about hiding the data in a picture get request. Like, I am implementing this game on canvas (html5). So he asked me at the end of the game to fetch a game over image from my server, and they request should contain the hashed score. I did not exactly understand the complete process but if you could explain it, would be really glad! :)

coda^ 这样你就可以很好地屏蔽请求

coda^ so you can mask the requests nicely

shouvik 我该怎么做!?

shouvik how do I do it!?

尾声^ 您可以编写您要提交的校验和.像 12312312a12313a232 是你的 md5,其中包含分数.将资产引入到画布中,例如

coda^ you can compose the checksum you want to submit. like 12312312a12313a232 is your md5 which contains the score. bring in an asset into the canvas like

尾声^ server.com/images/md5_hash_of_score/congratulations.png

coda^ server.com/images/md5_hash_of_score/congratulations.png

coda^ 可以通过 htaccess 重写服务器端

coda^ which you can rewrite server side via htaccess

推荐答案

现在我已经开始接受这样一个事实,即我根本无法向黑客隐瞒这一点,也无法原封不动地发送分数."

"Now I have come to accept the fact that there is no way on earth I can hide this from a hacker and send the scores unaltered."

<罢工>哦,是的,有!

Oh yes, there is!

您可以使用 RSA 或任何其他公钥加密方法(也称为非对称加密).

You can use RSA or any other public key encryption method (also called assymetric cryptography).

为服务器创建一组(公钥和私钥)密钥.让您的客户端代码包含您的服务器的公钥.

Create a set of (public and private) keys for the server. Have your client code include your server's public key.

在游戏结束时,客户端代码加密分数(使用此密钥)并将两者(普通分数和加密分数)发送到服务器.

At the end of the game, the client code, encrypts the score (with this key) and sends both (plain score and encrypted score) to server.

服务器解密并检查普通分数和解密分数是否相同.如果是,接受分数.如果不是,则拒绝(中间有黑客或网络错误).

Server decrypts and checks if plain score and decrypted one are same. If yes, accept score. If not, reject (there's a hacker or network error in the middle).

-------更新------------更正-------------

-------UPDATE-----------CORRECTION--------------

正如 Ambrosia 所指出的,我的方法在这种攻击下完全失败了.

As Ambrosia, pointed out, my approach fails completely with this kind of attack.

您真正想要的是从不受信任的一方(玩家)进行的(得分)计算中获得可信的结果.没有简单的方法来实现这一点.

What you actually want is to have a trusted result from a calculation (of score) made by an untrusted party (the player). No easy way to achieve this.

请参阅:http://coltrane.wiwi.hu-berlin.de/~fis/texts/2003-profit-untrust.pdf

还有这个:http://www.cse.psu.edu/~snarayan/publications/securecomputation.pdf

还有这个(需要订阅 ACM 数字图书馆):http://portal.acm.org/citation.cfm?id=643477.643479

And this (which needs a subscription to the ACM digital library): http://portal.acm.org/citation.cfm?id=643477.643479

这篇关于将游戏分数从客户端更新到服务器数据库的最安全方法?Javascript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会
问题描述: 在javascript中引用js代码,然后导致反斜杠丢失,发现字符串中的所有\信息丢失。比如在js中引用input type=text onkeyup=value=value.replace(/[^\d]/g,) ,结果导致正则表达式中的\丢失。 问题原因: 该字符串含有\,javascript对字符串进行了转
Rails/Javascript: How to inject rails variables into (very) simple javascript(Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript)
CoffeeScript always returns in anonymous function(CoffeeScript 总是以匿名函数返回)
Ordinals in words javascript(javascript中的序数)
getFullYear returns year before on first day of year(getFullYear 在一年的第一天返回前一年)