Php 阻止伪造连接?

Php 阻止伪造连接?,php,encryption,Php,Encryption,嗯,我正在设计一个反作弊的游戏战斗武器。 我想做的是用数据库“ping”程序,这样人们就不能简单地创建一个程序,让它看起来像是在使用反作弊软件 有没有办法“加密”或阻止其他人轻松模拟连接? 我对PHP不是很在行,到目前为止,它是这样添加的: public function Update() { $ign = $_GET['ign']; $timestamp = $_GET['uid']; $time = time(); i

嗯,我正在设计一个反作弊的游戏战斗武器。 我想做的是用数据库“ping”程序,这样人们就不能简单地创建一个程序,让它看起来像是在使用反作弊软件

有没有办法“加密”或阻止其他人轻松模拟连接? 我对PHP不是很在行,到目前为止,它是这样添加的:

public function Update()
    {
        $ign = $_GET['ign'];
        $timestamp = $_GET['uid'];
        $time = time();

        if(($time - 10 < $timestamp) && ($time + 10 > $timestamp))
        {
            $this->connection();
            $data = mysql_query("SELECT * FROM users WHERE ign = '{$ign}'");
            if(mysql_num_rows($data) > 0)
            {
                mysql_query("UPDATE users SET lastonline = '{$time}' WHERE ign = '{$ign}'");
            }
            else
            {
                mysql_query("INSERT INTO users (id, ign, lastonline) VALUES ( NULL, '{$ign}', '{$time}' ) ");
            }

            echo "Connected to database";
        }
        else
        {
            echo "Problem connecting";
        }
    }
我需要某种方法来保护它/使它很难迅速破裂。
而一旦破解我就可以轻松更换,希望这提供了足够的信息

首先,这里必须对SQL输入进行清理。我建议使用prepare with PDO ext/mysql is

等等。读这本书

但是,如果您正在使用mysql,并且拒绝更改,但是如果在PHP发布时将其更新为5.5,则会抛出E_弃用,使用mysql_real_escape_字符串并在查询中删除引号。 接下来,我们来实际处理请求

有几种方法可以做到这一点,但您应该采取的最安全和唯一的选择是加密功能强大的东西,例如一次性Pad或OAuth

生成凭证,并使游戏发送一个令牌,该令牌使用唯一生成的哈希签名,可能来自产品代码。这对于每个安装都应该是唯一的,并且应该生成能够由脚本验证的哈希

这是一个游戏公司不断研究的问题,但往往是徒劳的;你的游戏可以也将被任何认为值得花时间的人逆向设计。反作弊也将如此。 但是,请签署一份请求,并包括:

玩家的游戏名 一个非常精确的时间戳,可以通过某种方式进行验证。 请求签名加密安全 位置数据有助于禁止速度黑客,但如果有人远程传送等,请小心误报 反作弊所需的任何其他内容您都可能对此有一个规范 此外,出于对游戏的热爱,不要做朋克式的反作弊,也就是不要禁止僵尸网络式的请求;它可以被滥用


最后,我可能会建议请一位专业的安全研究员来审查所有内容。

保护游戏免受欺诈是一项非常复杂的任务。这不像在这里或那里插入几行那么简单。请看,如果我的IGN是x或1==1,并且我让游戏中的每个人都被禁止,那该怎么办?作弊是你最不担心的。如何保护您的数据不受SQL注入的影响!这个游戏有很糟糕的保护,我们正在制作一个第三方程序来改进@Bart D:它在哪里?
$db = new PDO(<connection details>);
$prepare = $db->prepare("SELECT * FROM users WHERE ign = :ign");
// Tip: make sure you actually check the prepare worked before trying to execute.
$prepare->execute(array(":ign" => $ign));