Problema con registro / whirlpool
#3

Quote:
Originally Posted by Jex_Lafer
Посмотреть сообщение
Que tal;

Espero alguien me pudiese ayudar con un pequeсo problema que tengo,
ya hace tiempo que he estado creando un GM y pues ya todo esta bien solo que decidн agregarle una Encriptaciуn
a la contraseсa lo que sucede es que asн como esta el cуdigo si encripta la contraseсa pero no guarda el nombre del jugador en la base de datos mysql... y de otra forma que lo tenia... guardaba el nombre del jugador pero no encriptaba la contraseсa

Aqui dejo el DIALOG, STOCK, OnPlayerRegister
PHP код:
//Dialogo al conectarse if not registered
        
case Registro_doc:
        {
        if(
response == 0)
            {
                  
Kick(playerid);
                  return 
1;
            }
            else
            {
                if(
strlen(inputtext))
                {
                    new 
tmppass[64];
                    
strmid(tmppassinputtext0strlen(inputtext), 255);
                    
OnPlayerRegister(playerid,inputtext);
                    return 
1;
                }
                else
                {
                    
ShowRegisterDialog(playerid);//Registro_doc
                    
return 1;
                }
            }
        } 
PHP код:
public OnPlayerRegister(playeridpassword[])
{
    if(
IsPlayerConnected(playerid))
    {
        
MySQLCheck();
         new 
playername3[MAX_PLAYER_NAME];
                         
GetPlayerName(playeridplayername3sizeof(playername3));
        new    
escapedPassword[129];
        
WP_Hash(escapedPasswordsizeof(escapedPassword), password);
        new 
newaccountsqlid InsertarJugador(playername3escapedPassword);
        if (
newaccountsqlid != 0)
        {
            
//Datos para registro
        
}
        else
        {
            
SendClientMessage(playeridCOLOR_RED"Ha ocurrido un error, desconectando.");
//            Kick(playerid);
            
return 0;
        }
    }
    return 
0;

PHP код:
//stock
stock InsertarJugador(pname[], password[])
{
    new 
query[200], escapednameMAX_PLAYER_NAME ],escapedPassword[129];
    
mysql_real_escape_stringpnameescapedname );
    
WP_Hash(escapedPasswordsizeof(escapedPassword), password);
     
format(querysizeof(query), "INSERT INTO "TABLENAME" (`"User_Name"`, `"P_Passswd"`) VALUES ('%s', '%s')"escapednameescapedPassword);
    
mysql_query(query);
    new 
newplayersid E_Usuario(pname);
    if (
newplayersid != 0)
    {
        return 
newplayersid;
    }
    return 
0;

їPorquй haces esto?

pawn Код:
new tmppass[64];
strmid(tmppass, inputtext, 0, strlen(inputtext), 255);
OnPlayerRegister(playerid,inputtext);
Esta parte de cуdigo no tiene sentido alguno, te registra mal porque estбs usando DEMASIADAS celdas їporquй?
analicemos el cуdigo de acб:
pawn Код:
public OnPlayerRegister(playerid, password[])
{
    if(IsPlayerConnected(playerid))
    {
        MySQLCheck();
        new playername3[MAX_PLAYER_NAME];
                        GetPlayerName(playerid, playername3, sizeof(playername3));
        new escapedPassword[129];
        WP_Hash(escapedPassword, sizeof(escapedPassword), password);

        new newaccountsqlid = InsertarJugador(playername3, escapedPassword);
        if (newaccountsqlid != 0)
        {
            //Datos para registro
        }
        else
        {
            SendClientMessage(playerid, COLOR_RED, "Ha ocurrido un error, desconectando.");
//          Kick(playerid);
            return 0;
        }
    }
    return 0;
}
Bien ahн hasheas la contraseсa dada para luego llamar a la funciуn InsertarJugador con los parбmetros de la contraseсa encriptada y si eso retorna un valor que de los datos para el registro. Ahora en InsertarJugador estas haciendo esto:

pawn Код:
stock InsertarJugador(pname[], password[])
{
    new query[200], escapedname[ MAX_PLAYER_NAME ],escapedPassword[129];

    mysql_real_escape_string( pname, escapedname );
    WP_Hash(escapedPassword, sizeof(escapedPassword), password);
    format(query, sizeof(query), "INSERT INTO "TABLENAME" (`"User_Name"`, `"P_Passswd"`) VALUES ('%s', '%s')", escapedname, escapedPassword);
    mysql_query(query);
    new newplayersid = E_Usuario(pname);
    if (newplayersid != 0)
    {
        return newplayersid;
    }
    return 0;
}
Ahн escapas la cadena de texto para evitar una inyecciуn SQL pero a ver hay un error estбs escapando el NOMBRE del jugador en ves de la contraseсa, por pura lуgica para hacer una inyecciуn SQL decente se necesita una cadena de caracteres mayor a 24 ademбs de tener algunos caracteres especiales los cuales no se pueden insertar en la API de SA-MP. Tendrнas que escapar la contraseсa del jugador pero igual no tendrнa sentido escaparla ya que ya la hasheaste anteriormente (en OnPlayerRegister) entonces lo que era la contraseсa del jugador anteriormente ahora es un texto COMPLETAMENTE distinto a lo que era y no se puede hacer una inyecciуn SQL asн.
Luego hasheas la contraseсa denuevo por lo cual tendrб muchнsimos mбs caracteres que antes y no entrarб en la base de datos cuando lo quieras enviar.
Lo que tendrнas que hacer serнa esto:

pawn Код:
public OnPlayerRegister(playerid, password[])
{
    if(IsPlayerConnected(playerid))
    {
        MySQLCheck();
        new playername3[MAX_PLAYER_NAME];
                        GetPlayerName(playerid, playername3, sizeof(playername3));
        new newaccountsqlid = InsertarJugador(playername3, password);
        if (newaccountsqlid != 0)
        {
            //Datos para registro
        }
        else
        {
            SendClientMessage(playerid, COLOR_RED, "Ha ocurrido un error, desconectando.");
//          Kick(playerid);
            return 0;
        }
    }
    return 0;
}

pawn Код:
stock InsertarJugador(pname[], password[])
{
    new query[200],escapedPassword[129];

    WP_Hash(escapedPassword, sizeof(escapedPassword), password);
    format(query, sizeof(query), "INSERT INTO "TABLENAME" (`"User_Name"`, `"P_Passswd"`) VALUES ('%s', '%s')", pname, escapedPassword);
    mysql_query(query);
    new newplayersid = E_Usuario(pname);
    if (newplayersid != 0)
    {
        return newplayersid;
    }
    return 0;
}
Eso deberнa funcionar.
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 2 Guest(s)