php - MySQL 从 IPBoard 帐户授权用户

标签 php mysql sql single-sign-on invision-power-board

我最近为我的游戏社区获得了 IPBoard 开发板软件,我将其从 SMF 转换而来。

当我使用 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]);

?>

$input 变量返回尝试玩游戏的用户提供的信息。它是一个如下所示的数组:

$input[2] - the username; 
$input[3] - the password (plain text)

其他值是游戏正在使用的东西,不需要。

我从游戏中成功调用了 php 脚本,php 正在发回信息,但它返回的哈希值是:“错误”

我尝试了很多不同的方法,但总是得到相同的错误消息而不是散列。

一些可能有兴趣了解的额外信息:

我说的游戏是 Multi Theft Auto,它是 GTA:SA 的多人修改版(也许有人知道),它使用 LUA 编写脚本。

mta_sdk.php 文件是为这个游戏开发的 php sdk(能够使用外部 php 脚本从游戏发送和接收信息。

也许这不是一个传统的问题。我已尽力解释清楚,因为我知道您不会习惯这款游戏及其运作方式。

提前致谢

最佳答案

我有点困惑 - 为什么要将密码存储为明文,然后使用 salt 将它们转换为 md5?如果我错了,请原谅我,但这似乎不是一个非常明智的方法。

尝试将一些数据回显到网页,或将其存储在调试文本文件中;一种简单的方法是在您的服务器上设置一个文本文件,将其更改为 777,并包含此代码以写入其中;

$debug_txt = fopen('debug.txt', 'w');
fwrite($debug_tx, $error_here);
fclose($debug_tx);

要在此处获取 $error_here,最简单的方法就是放入一些 if 语句。即:

if (mysql_select_db($DB_BASEDATOS, $conexion))    
{    
$sql = "SELECT members_pass_salt FROM ipb_members WHERE name = '".$input[2]."'";    
$Res = mysql_query($sql, $conexion); 
// Write out the results to the debugger
// Use a foreach loop with mysql_fetch_assoc if there might be more than one entry.
}
else
{
$error_here = mysql_error();
}

等等等等

有了上面的内容,您至少应该能够看到错误到底是什么,并能够与之抗争。

关于php - MySQL 从 IPBoard 帐户授权用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10564728/

相关文章:

php - 在 laravel 中路由未定义错误,即使路由已定义

php - PHP 中的重复项排序

javascript - 获取用于 PHP 查询的 JQuery UI Slider 的值

Arch-Linux/arm 上的 C++ MySQL 连接器

mysql - ruby rails : Find the record with lowest value of a specific column

mysql - SQL - 查找具有最大行数的行集的 id/"x_id"

php - 使用 MySQL 查询返回正确数据时遇到问题

php - 是否可以使用 php 表单/按钮将新表插入数据库?

sql - 在sql server中舍入小数

mysql - 如何自动增加一个值