C#客户端到PHP服务器身份验证

时间:2013-06-18 21:57:46

标签: xna c# client-server php authentication

我的XNA游戏需要使用WebRequest连接到我的网站到PHP页面,该页面会检查用户的数据库并检查密码是否正确。

我已经有一个登录脚本会返回一条消息,例如“success”“fail”显然这是暂时的,需要进行改进,原因很简单,它很容易被伪造。

C#登录请求

    //Create the POST data
    ASCIIEncoding encoding = new ASCIIEncoding();
    string postData = "username=" + user + "&pass=" + pass;
    byte[] data = encoding.GetBytes(postData);

    //Make a request
    WebRequest request = WebRequest.Create("http://example.com/login.php");
    request.Method = "POST"; //We are posting the info
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;

    //Open a stream, write into, then send it
    Stream stream = request.GetRequestStream();
    stream.Write(data, 0, data.Length);
    stream.Close();

    //Get response
    WebResponse response = request.GetResponse();
    stream = response.GetResponseStream();

    //Make a new stream, We will read from this
    StreamReader sr = new StreamReader(stream);
    string responseString = sr.ReadToEnd();

    //TODO: If the responseString says the client if authenticated, procede, if not, display error to user (Invalid password, etc)

PHP脚本只找到用户并比较提交的密码(所有这些都与Joomla站点数据库集成,因此用户拥有一个站点和游戏帐户)。

现在,我的PHP脚本如何发回一种可靠的身份验证方式,并提供某种令牌/ ID,所以当我想提交例如以后的高分时,它知道它来自这个用户,并没有被伪造?

2 个答案:

答案 0 :(得分:3)

说实话,没有真正的方法来确保您在PHP脚本中接收的数据实际来自您的客户端。你能做的最好就是让它变得更难。要小心你花了多少时间,这是一个很好的,那些想要作弊的人会。

Session Hijacking仅涉及试图访问或操纵您的信息的第三方。对于游戏,这个第三方并不关心你的高分,他们想要信用卡和密码。 (密码是另一个故事,但你几乎需要SSL)

根据您的描述,您主要关注的是作弊,基本上所有作弊都是第一方。玩家想要作弊。防止(大多数)作弊的唯一可靠方法是在您自己的系统上运行游戏并尽可能少地控制客户端(例如EVE Online,暗黑破坏神3,任何暴雪)。这通常很难实现,所以我会提出一些替代方案。

要了解你的敌人,那里有大量的内存编辑工具。从注射功能到将钱从100改为999999都可以完成。改变数值(比如得分)需要大约15分钟,我不是很擅长。

完整性检查。在PHP中,确保提交的分数确实有意义。假设你从客户端获得的一切都被操纵了。

<强> PunkBuster的即可。支付像Punkbuster这样的公司或者在Steam上你可以(或许可以)使用VAC。这些工具不会宣传他们的工作方式,VAC甚至有一个延迟的禁令系统,因此你不知道触发它的是什么,但从广义上说,他们会监控内存变化和/或扫描已知的黑客攻击

<强>诚实即可。 Pssh,是的,对(j / k)。大声笑,但是真的:你相信你的朋友吧?考虑没有网友的记分牌。

也许实施类似基于季节的记分牌?每隔X天,记分牌重置一次。这减少了欺骗的动机。

这就是它。你可以尝试模糊你的记忆价值,它可能会阻止像我这样的人,但如果有人想要它足够糟糕并且足够了解,他们就能够打破它并释放工具。

我会这样说:先做一些值得黑客攻击的东西!如果人们经历了欺骗的努力,这是一个好兆头,你应该感到高兴。

答案 1 :(得分:0)

你指的是Session Token。会话令牌是在登录后对给定时间段内的操作进行身份验证的好方法。您的php可以将会话令牌与用户名相关联,该用户名在给定的时间后由服务器进程清理,此时用户必须再次登录。