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


C# Client to PHP server authentication

我的XNA游戏需要连接到我的网站与WebRequest到一个PHP页面,检查数据库的用户和检查,看看密码是否正确。

我已经有一个登录脚本,将返回一个消息,如"成功""失败"显然这是暂时的,需要改进的安全原因,它很容易被伪造。

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,以便当我想提交时,例如,一个高分之后,它知道它来自这个用户,而不是伪造的?

坦率地说,没有真正的方法来确保您在PHP脚本中接收的数据实际上来自您的客户机。你能做的就是让它更难。要注意你在这上面花了多少时间,这是一口深井,那些想要欺骗的人会钻入其中。

会话劫持只涉及试图访问或操纵您的信息的第三方。对于游戏,第三方并不关心你的高分,他们需要的是信用卡和密码。(密码是另一回事,但你非常需要SSL)

从你的描述来看,你主要关心的是作弊,基本上所有的作弊都是第一方。玩家希望作弊。防止(大多数)作弊的唯一可靠方法是在你自己的系统上运行游戏,给客户端尽可能少的控制权。《星战前夜》、《暗黑破坏神3》以及暴雪的任何游戏)。这通常很难实现,所以我将提出一些替代方案。

要了解你的敌人,有太多的记忆编辑工具。从注入函数到将你的钱从100换成999999都可以实现。改变数值(比如分数)要花我15分钟,而且我不太擅长。

<<p> 完备性检查/strong>。在PHP中,确保提交的分数是有意义的。假设您从客户端获得的所有内容都是经过操作的。

反作弊工具。付费给像Punkbuster这样的公司,或者在Steam上发布你的游戏,在那里你可以使用VAC。这些工具不公布他们是如何工作的,VAC甚至有一个延迟的禁令系统,所以你不知道是什么触发了它,但总的来说,他们监控内存变化和/或扫描已知的黑客。

诚实

。对,对(j/k)哈哈,但说真的:你相信你的朋友,对吗?

也许实现一些像基于季节的记分牌?每隔X天,记分牌会重置一次。这就减少了作弊的动机。

差不多就是这样了。你可以试着模糊你的记忆值,这可能会阻止像我这样的人,但如果有人非常想要它,并且足够了解它,他们就能打破它并发布一个工具。

我要说的是:先做一些值得破解的东西!如果人们努力去欺骗,这是一个很好的信号,你应该感到高兴。

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