我最近为我的游戏社区获得IPBoard开发板软件,我将它从SMF转换而来。MySQL授权IPBoard帐户的用户
当我使用smf时,我使用一个系统来授权玩家在我的游戏服务器上注册,这个脚本称为php脚本,它使得玩家在游戏中输入密码的哈希(sha1)并将其发回给脚本在游戏中运行。然后我检查了球员是否已经在论坛上注册,或者是否让他参加了比赛。那么,IPBoard使用不同的哈希:
$hash = md5(md5($salt) . md5($password));
其中:
$hash is the value stored in the database column members_pass_hash.
$salt is the value stored in the database column members_pass_salt.
$password is the plaintext password.
什么我想是让一个PHP脚本,将返回到脚本在游戏中正确的散列,我会将其从游戏中稍后比较到数据库中。这是我的代码:
<?php
include("mta_sdk.php");
$input = mta::getInput();
// Configuración de la aplicación
$DB_SERVIDOR = 'localhost:3306';
$DB_USUARIO = 'root';
$DB_CLAVE = 'xxx';
$DB_BASEDATOS = 'ipboard';
$conexion = mysql_connect($DB_SERVIDOR, $DB_USUARIO, $DB_CLAVE);
mysql_select_db($DB_BASEDATOS, $conexion);
mysql_query("SET NAMES 'utf8'");
$sql = "SELECT members_pass_salt FROM ipb_members WHERE name = '".$input[2]."'";
$Res = mysql_query($sql, $conexion);
$rowRes = mysql_fetch_assoc($Res);
$salt = $rowRes['members_pass_salt']
$hash = md5(md5($salt) . md5($input[3]));
//$hash = $salt;
// Return encrypted string using MD5
mta::doReturn($hash,$input[1],$input[2],$input[3],$input[4]);
>
$输入的是谁attemping在比赛中的发挥用户给定的变量返回的信息?它像以下的数组:
$input[2] - the username;
$input[3] - the password (plain text)
的其它值的东西,该游戏是使用,不需要用于此。
我成功地称之为从游戏PHP脚本,而PHP发回信息,但它返回的哈希值是:
我试着做这件事的许多不同的方式,但总是得到同样的错误“ERROR”消息而不是哈希。
一些额外的信息可能有兴趣知道:
比赛中我说的是多飞车,多人修改为GTA:SA(也许有人知道它),它使用LUA脚本的。
的mta_sdk.php文件是这个游戏开发PHP的SDK(能够发送和使用外部PHP脚本从游戏中收到的信息。
也许这不是一个convencional问题,我试着解释这更好的,因为我可以,因为我知道你不会来这个游戏,它是如何工作
在此先感谢
除了潜在的SQL注入和古代'mysql_ *'的使用,在代码中我看不到任何明显的*错误*(尽管我不熟悉MultiTheft Auto并且不提供任何声明关于这些方面)。也许SQL没有返回任何记录 - 你不检查它是否?尝试在另一个MySQL客户端中测试'$ sql'的值。 – eggyal
我在phpmyadmin中测试了SQL查询并且它正在工作(刚刚用我正在测试的示例替换变量,并且它是相同的 – Karevan
是的,但'$ sql'变量实际上是否包含您期望的SQL?尝试输出它在某个地方用于调试 – eggyal