繁体   English   中英

Unity3D到PHP的安全性问题

[英]Unity3D to PHP Security Issues

我有一个困惑的问题。 好的,这是我的Unity3D游戏。

就人们通常玩的游戏而言,使之有意义。 假设玩家的帐户中有500金币(保存在数据库中)。 并且玩家通过执行某种任务赚取了243金币,游戏(Unity3D)怎么能分辨出他们专门赚取了243金币的PHP文件?

因为问题出在这里,所以在Unity3D中有一个称为WWW的类。 它允许您将某种字符串发送到PHP文件。

int currentGold;
string goldToSend = currentGold.ToString(); // Only using that for example.

WWWForm form = new WWWForm();
form.AddField("NameOfPostRequestInPHPFile",goldToSend);
WWW www = new WWW("website.com/PHPFile.php", form);

现在您可以看到,我处于一个非常大的难题中,因为您什么都不能信任客户端,一个人实际上如何从客户端向PHP发送随机的黄金金额,然后放入数据库。

我面临的问题是,如何在没有客户端实际告诉事情的情况下,如何真正使PHP理解游戏中发生的事情,而您却不能信任客户端,客户端如何才能实际告诉PHP加载,使用这些数据,然后将其放入数据库中。

我考虑过使用哈希来填充东西,但是那仍然会带来客户端问题。

可以说

if(sentGold == 243){
string hash = hash01;
// Change it to hash1000 (to get 1000 gold).
}
if(sentGold == 1000){
string hash = hash1000;
}

如您所见,使用if语句显然也不起作用,因为然后可以仅在本地更改哈希以适应其不可靠的尝试。 另外,如果有20K if语句,这看起来像垃圾。

我知道不可能完全停止黑客入侵。 但是同时,如果我做某事,我想做正确的事,如果您明白我的意思,不是半信半疑吗?

如果到目前为止,请阅读我的帮助消息。 非常感谢您花时间阅读它,这对我来说意义重大。

现在,如果还有其他技术或提示,您可能知道这可能对我有帮助,或者甚至在其上编写了一个教程(我一直在找几天),但我仍然陷入僵局,因为没有人解决这个问题他们可能使用秘密密钥等,但是他们无法解决发送的字符串很容易被篡改的问题。 他们要做的只是将243更改为9999999999,然后他们变得很富有。

您不能信任客户吗? 正确。
但...
你是这艘船的船长。 因此,您的服务器需要足够聪明才能检测到作弊行为。
如果游戏中的某个任务给了200金币,则您可以将该任务的引用与值(200,“ SomeTask”)一起发送。 现在,如果客户端尝试发送(10000,“ SomeTask”),服务器将认为它作弊。 您可能会说客户可以根据他们执行任务的能力来获得可变的黄金,在这种情况下,您可以为每个任务设置一个最大限制值,并在将黄金添加到数据库之前进行检查。

永远不要从客户端发送总金币以保存在数据库中。 客户只能发送新赚到的黄金,并将取回总价值。

例如:

Database: 2000 gold  -> Game: 2000 gold

Game: POST (130,"pickupjewel");

Databse: if (130 <= MaxValue("pickupjewel")) [TRUE] -> SUCCESS
Database: 2130 gold -> Game: 2130 gold


Game: POST (999999,"pickupjewel");

Databse: if (999999<= MaxValue("pickupjewel")) [FALSE] -> FAILURE
Database: 2130 gold -> Game: 2130 gold

我希望这有帮助。 让我知道您是否有任何特定问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM