[Ajuda] WP_Hash/mySQL Password Problem
#1

Ola, en tenho um problema aqui num sistema de password hashing

Eu em primeiro tinha um problema en que o hashing nao apparecia no mySQL, e ja esta resolvido, mas agora, eu posso entrar com qualquer password, se o password for 4321 eu posso entrar com 1234

Eu nao vejo qual й o problema, e tambem meti um print no CheckUser, para meter a password na console, e mostra-me o Hashing (FEDFD5S0DG3D13GD1) e nao a password

Aqui esta o meu codigo

pawn Код:
// Includes  

#include <a_samp>  
#include <a_mysql>  

// Native WP_Hash em cima

native WP_Hash(buffer[], len, const str[]);    

// mysql defines  

#define mysql_host "localhost"  
#define mysql_user "root"  
#define mysql_password ""  
#define mysql_database "sfrp"  

// Dialogs defines  

#define RegDialog 0  
#define LoginDialog 1  

// playerdata  

enum playerInfo  
{  
    Password[129],  
    skin,  
    db_id  
}  
new pInfo[MAX_PLAYERS][playerInfo];  

// forwards  

forward CheckUser(playerid);  
forward CheckPassword(playerid);  

// mysql variable  

new dbhandle;  

// OnGameModeInit  

    dbhandle = mysql_connect(mysql_host, mysql_user, mysql_database, mysql_password);  
    if(mysql_errno() != 0)  
    {  
        printf("[MySQL] Failed to connect.");  
    }  
    else  
    {  
        printf("[MySQL] Succesfully connected.");  
    }  

// OnGameModeExit  

    mysql_close(dbhandle);  

// OnPlayerConnect  

    new query[128];  
    mysql_format(dbhandle, query, sizeof(query), "SELECT `Password`, `ID` FROM `users` WHERE `Username` = '%e' LIMIT 1", PlayerName(playerid));
    mysql_tquery(dbhandle, query, "CheckUser", "i", playerid);  

// OnPlayerDisconnect  
// SavePlayerStats  

    SavePlayerStats(playerid);  
    ResetPlayerStats(playerid);  

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])  
{  
    /***************  
      Login Dialog  
    ****************/
 
    if(dialogid == LoginDialog)  
    {  
        if(response)  
        {      
            if (strlen(inputtext) > 0)  
               {      
                   new hashpass[129], query[128];  
                   WP_Hash(hashpass, sizeof(hashpass), inputtext);  
                if(!strcmp(hashpass,  pInfo[playerid][Password]))  
                {  
                    mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM `users` WHERE `Username` = '%e' LIMIT 1", PlayerName(playerid));  
                    mysql_tquery(dbhandle, query, "CheckPassword", "i", playerid);  
                }  
            }  
            else  
            {  
                new string[159 + MAX_PLAYER_NAME];  
                format(string, sizeof(string),"Hello %s, Welcome to San Fierro Roleplay.\n\nAccount status: {00FF00}Registered.\n\n{FF0000}You must type the password related to this account to login.", PlayerName(playerid));  
                ShowPlayerDialog(playerid, LoginDialog, DIALOG_STYLE_PASSWORD, "{00FF00}Account found - Logging in...", string, "Login", "Cancel");  
             }  
        }  
        else  
        {  
            Kick(playerid);  
        }  
        return 1;  
    }  

    /***************  
    Register Dialog  
    ****************/
 
    if(dialogid == RegDialog)  
    {  
        if(response)  
        {  
            if (strlen(inputtext) > 0)  
            {  
                new query[200];  
                WP_Hash(pInfo[playerid][Password], 129, inputtext);  
                mysql_format(dbhandle, query, sizeof(query), "INSERT INTO `users` (`Username`, `Password`) VALUES ('%e', '%e')", PlayerName(playerid), pInfo[playerid][Password]);  
                mysql_tquery(dbhandle, query, "", "");  
            }  
            else  
            {  
                new string[145 + MAX_PLAYER_NAME];  
                format(string, sizeof(string), "Hello %s, Welcome to San Fierro Roleplay.\n\nAccount status: {FF0000}Unregistered.\n\nYou must create a password below to register this account.", PlayerName(playerid));  
                ShowPlayerDialog(playerid, RegDialog, DIALOG_STYLE_INPUT, "{FF0000}Account not found - Registering...", string, "Register", "Cancel");  
            }          
        }  
        else  
        {  
            Kick(playerid);  
        }  
        return 1;  
    }  
    return 1;  
}  

// Functions  

SavePlayerStats(playerid)  
{  
    new query[128];  
    mysql_format(dbhandle, query, sizeof(query), "UPDATE `users` SET `Skin` = %i WHERE `ID` = %i", GetPlayerSkin(playerid), pInfo[playerid][db_id]);  
    mysql_tquery(dbhandle, query, "", "");  
    return 1;  
}  

ResetPlayerStats(playerid)  
{  
    for (new i=0; i< sizeof(pInfo[]); i++)  
    {  
        pInfo[playerid][playerInfo:i] = 0;  
    }  
    return 1;  
}  

// Callbacks  

public CheckUser(playerid)  
{  
    new rows, fields;  
    cache_get_data(rows, fields, dbhandle);  
    if (rows == 0)  
    {  
        new string[152 + MAX_PLAYER_NAME];  
        format(string, sizeof(string), "Hello %s, Welcome to San Fierro Roleplay.\n\nAccount status: {FF0000}Unregistered.\n\n{9AB3D0}Create a password below to register this account.", PlayerName(playerid));  
        ShowPlayerDialog(playerid, RegDialog, DIALOG_STYLE_INPUT, "{FF0000}Account not found - Registering...", string, "Register", "Cancel");  
    }  
    else  
    {  
        new string[152 + MAX_PLAYER_NAME];  
        cache_get_field_content(0, "Password", pInfo[playerid][Password], dbhandle, 129);  
        pInfo[playerid][db_id] = cache_get_field_content_int(0, "ID");
        printf("%s", pInfo[playerid][Password]);
        format(string, sizeof(string), "Hello %s, Welcome to San Fierro Roleplay.\n\nAccount status: {00FF00}Registered.\n\n{9AB3D0}Type the password related to this account to login.", PlayerName(playerid));  
        ShowPlayerDialog(playerid, LoginDialog, DIALOG_STYLE_PASSWORD, "{00FF00}Account found - Logging in...", string, "Login", "Cancel");  
    }  
    return 1;  
}  

public CheckPassword(playerid)  
{  
    pInfo[playerid][skin] = cache_get_field_content_int(0, "Skin");  
    return 1;  
}
Espero que me possam ajudar
Reply
#2

Код:
mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM `users` WHERE `Username` = '%e' AND `Password`='%e' LIMIT 1", PlayerName(playerid), hashpass);   
mysql_tquery(dbhandle, query, "CheckPassword", "i", playerid);
Vocк esqueceu da senha na clбusula WHERE.
Reply
#3

Addicionei a senha na clausula WHERE, mas continuo a poder logar com uma senha diferente :/
Reply
#4

Li o cуdigo novamente e vejo que me enganei. Nгo й necessбrio adicionar a senha na clбusula.
Reply
#5

Quote:
Originally Posted by zPain
Посмотреть сообщение
Li o cуdigo novamente e vejo que me enganei. Nгo й necessбrio adicionar a senha na clбusula.
Eu segui este tutorial: https://sampforum.blast.hk/showthread.php?tid=574714
Reply
#6

Ja resolvi o problema (finalmente)
Tirei isto:
PHP код:
if (strlen(inputtext) > 0)

Do LoginDialog (OnDialogResponse)
E comeзou a dar, nao sei porque

Obrigado pela ajuda
Reply
#7

Testou quando deixa o valor nulo, pra ver se da algum problema? Pois isso chega se nгo foi nulo.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)