MySQL для авторизации пользователя из учетной записи IPBoard

Недавно я приобрел программное обеспечение для 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 - это sdk для php, разработанный для этой игры (чтобы иметь возможность отправлять и получать информацию из игры, используя внешние php-скрипты.

Может быть, это не обычный вопрос. Я пытался объяснить это как можно лучше, потому что я знаю, что ты не привыкнешь к этой игре и как она работает.

заранее спасибо

1 ответ

Решение

Я немного запутался - почему вы храните пароли в виде открытого текста, а затем конвертируете их в 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();
}

и т. д.

С учетом вышесказанного вы должны, по крайней мере, иметь возможность увидеть, в чем именно заключается ошибка, и уметь с ней бороться.

Другие вопросы по тегам