¡Bienvenido! ¿Aún no estás registrado?, deberás registrarte antes de poder usar el Chat, Comentar y Descargar en el Foro. Usa un email válido para la activación.
Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

NOTICIAS OFICIALES Presentamos Risus Nova 2.0: nueva etapa del CMS
#11

0
Es más cada vez que un usuario inicie sesión puedes usar password_needs_rehash esto actualizará el hash generado anteriormente, pero no cambiará la contraseña del usuario.
Es mejor usarlo con el algoritmo PASSWORD_ARGON2ID (se llama Argon2id), ya que como tercer parámetro se puede añadir esto:
$password '#HolaMundo26';

$hash password_hash($password'PASSWORD_ARGON2ID', [
    
'memory_cost' => << 17// 128 MB
    
'time_cost'   => 4,
    
'threads'     => 2,
]); 
// Sale: $argon2id$v=19$m=131072,t=4,p=2$dC9TWFp5bWVGYjFzRVVLaQ$3/d6h86ds1nx5n6nKjyPlRnpBiO/W8M+9x973ApLolQ 
Dependiendo de la configuración que se utilice lo hará más difícil

Accede al servidor de Discord y descarga ZCode|PHPost
Responder
#12

1
(05-15-2026, 11:01 PM)Miguel92 escribió: Debes agradecer para ver el contenido...Es más cada vez que un usuario inicie sesión puedes usar password_needs_rehash esto actualizará el hash generado anteriormente, pero no cambiará la contraseña del usuario.
Es mejor usarlo con el algoritmo PASSWORD_ARGON2ID (se llama Argon2id), ya que como tercer parámetro se puede añadir esto:
 
$password '#HolaMundo26';

$hash password_hash($password'PASSWORD_ARGON2ID', [
    
'memory_cost' => << 17// 128 MB
    
'time_cost'   => 4,
    
'threads'     => 2,
]); 
// Sale: $argon2id$v=19$m=131072,t=4,p=2$dC9TWFp5bWVGYjFzRVVLaQ$3/d6h86ds1nx5n6nKjyPlRnpBiO/W8M+9x973ApLolQ 
Dependiendo de la configuración que se utilice lo hará más difícil

Sí, tienes razón, haciendo pruebas en la demo con el registro, se me ocurrió eso, iba a subir el script hoy, pero voy a implantarle lo que dices y un error que le visto hoy en las fotos, no las he utilizado nunca y al probarlas hoy lo he visto.
Mañana si me da tiempo lo hago y lo subo, tengo que salir a reparar una avería de luz y no sé a qué hora voy a llegar. Gracias.

Nota: Tiene un error de sintaxis, PHP el algoritmo se pasa como constante nativa, sin comillas, tiene que ser así.
 
$password '#HolaMundo26';

$opciones = [
    
'memory_cost' => << 17// 128 MB
    
'time_cost'   => 4,        // 4
    
'threads'     => 2,        // 2
];

$hash password_hash($passwordPASSWORD_ARGON2ID$opciones); 
Responder
#13

1
(05-16-2026, 12:33 AM)Tronlar escribió: Debes agradecer para ver el contenido...
(05-15-2026, 11:01 PM)Miguel92 escribió: Debes agradecer para ver el contenido...Es más cada vez que un usuario inicie sesión puedes usar password_needs_rehash esto actualizará el hash generado anteriormente, pero no cambiará la contraseña del usuario.
Es mejor usarlo con el algoritmo PASSWORD_ARGON2ID (se llama Argon2id), ya que como tercer parámetro se puede añadir esto:
 
$password '#HolaMundo26';

$hash password_hash($password'PASSWORD_ARGON2ID', [
    
'memory_cost' => << 17// 128 MB
    
'time_cost'   => 4,
    
'threads'     => 2,
]); 
// Sale: $argon2id$v=19$m=131072,t=4,p=2$dC9TWFp5bWVGYjFzRVVLaQ$3/d6h86ds1nx5n6nKjyPlRnpBiO/W8M+9x973ApLolQ 
Dependiendo de la configuración que se utilice lo hará más difícil

Sí, tienes razón, haciendo pruebas en la demo con el registro, se me ocurrió eso, iba a subir el script hoy, pero voy a implantarle lo que dices y un error que le visto hoy en las fotos, no las he utilizado nunca y al probarlas hoy lo he visto.
Mañana si me da tiempo lo hago y lo subo, tengo que salir a reparar una avería de luz y no sé a qué hora voy a llegar. Gracias.

Nota: Tiene un error de sintaxis, PHP el algoritmo se pasa como constante nativa, sin comillas, tiene que ser así.
 
$password '#HolaMundo26';

$opciones = [
    
'memory_cost' => << 17// 128 MB
    
'time_cost'   => 4,        // 4
    
'threads'     => 2,        // 2
];

$hash password_hash($passwordPASSWORD_ARGON2ID$opciones); 

No me percate de eso  Confused , habré copiado las comillas porque en el archivo lo tengo así ...
if(defined('PASSWORD_ARGON2ID')) { 

Accede al servidor de Discord y descarga ZCode|PHPost
Responder
#14

0
(05-16-2026, 01:04 AM)Miguel92 escribió: Debes agradecer para ver el contenido...
(05-16-2026, 12:33 AM)Tronlar escribió: Debes agradecer para ver el contenido...
(05-15-2026, 11:01 PM)Miguel92 escribió: Debes agradecer para ver el contenido...Es más cada vez que un usuario inicie sesión puedes usar password_needs_rehash esto actualizará el hash generado anteriormente, pero no cambiará la contraseña del usuario.
Es mejor usarlo con el algoritmo PASSWORD_ARGON2ID (se llama Argon2id), ya que como tercer parámetro se puede añadir esto:
 
$password '#HolaMundo26';

$hash password_hash($password'PASSWORD_ARGON2ID', [
    
'memory_cost' => << 17// 128 MB
    
'time_cost'   => 4,
    
'threads'     => 2,
]); 
// Sale: $argon2id$v=19$m=131072,t=4,p=2$dC9TWFp5bWVGYjFzRVVLaQ$3/d6h86ds1nx5n6nKjyPlRnpBiO/W8M+9x973ApLolQ 
Dependiendo de la configuración que se utilice lo hará más difícil

Sí, tienes razón, haciendo pruebas en la demo con el registro, se me ocurrió eso, iba a subir el script hoy, pero voy a implantarle lo que dices y un error que le visto hoy en las fotos, no las he utilizado nunca y al probarlas hoy lo he visto.
Mañana si me da tiempo lo hago y lo subo, tengo que salir a reparar una avería de luz y no sé a qué hora voy a llegar. Gracias.

Nota: Tiene un error de sintaxis, PHP el algoritmo se pasa como constante nativa, sin comillas, tiene que ser así.
 
$password '#HolaMundo26';

$opciones = [
    
'memory_cost' => << 17// 128 MB
    
'time_cost'   => 4,        // 4
    
'threads'     => 2,        // 2
];

$hash password_hash($passwordPASSWORD_ARGON2ID$opciones); 

No me percate de eso  Confused , habré copiado las comillas porque en el archivo lo tengo así ...
if(defined('PASSWORD_ARGON2ID')) { 

Ya se lo he puesto, ayer por la noche me puse a estudiarlo y lo he terminado esta mañana, ya funciona bien el registro y el login, lo he puesto así,
le he añadido addslashes() porque el hash de Argon2id contiene caracteres como $ y podrían dar problemas sin escapar.
 
$key defined('PASSWORD_ARGON2ID')
    ? 
password_hash($tsData['user_password'], PASSWORD_ARGON2ID, ['memory_cost' => 65536'time_cost' => 4'threads' => 2])
    : 
password_hash($tsData['user_password'], PASSWORD_BCRYPT); 
 
$new_hash defined('PASSWORD_ARGON2ID')
    ? 
password_hash($_POST['pass'], PASSWORD_ARGON2ID, ['memory_cost' => 65536'time_cost' => 4'threads' => 2])
    : 
password_hash($_POST['pass'], PASSWORD_BCRYPT);
    
db_exec(array(__FILE____LINE__), 'query''UPDATE u_miembros SET user_password = \''.addslashes($new_hash).'\' WHERE user_id = \''.$data['user_id'].'\'') or exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db') ); 
Responder
#15

1
(05-16-2026, 09:23 AM)Tronlar escribió: Debes agradecer para ver el contenido...Ya se lo he puesto, ayer por la noche me puse a estudiarlo y lo he terminado esta mañana, ya funciona bien el registro y el login, lo he puesto así,
le he añadido addslashes() porque el hash de Argon2id contiene caracteres como $ y podrían dar problemas sin escapar.
 
$new_hash defined('PASSWORD_ARGON2ID')
    ? 
password_hash($_POST['pass'], PASSWORD_ARGON2ID, ['memory_cost' => 65536'time_cost' => 4'threads' => 2])
    : 
password_hash($_POST['pass'], PASSWORD_BCRYPT);
    
db_exec(array(__FILE____LINE__), 'query''UPDATE u_miembros SET user_password = \''.addslashes($new_hash).'\' WHERE user_id = \''.$data['user_id'].'\'') or exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db') ); 

No, el símbolo $ no va a dar problemas, además el hash no contiene comillas por lo cual addslashes no va a ser nada en realidad, crea una clase para centralizar lo del password hash, así solo creas la contraseña y la verificas, evitándote copiar todo eso.
 
$algorithm defined('PASSWORD_ARGON2ID') ? PASSWORD_ARGON2ID : (
     
defined('PASSWORD_ARGON2I') ? PASSWORD_ARGON2I PASSWORD_BCRYPT
);

$options = ['cost' => 12]; // default
if (in_array($algorithm, [PASSWORD_ARGON2IDPASSWORD_ARGON2I], true)) {
    
$options = [
        
'memory_cost' => << 16// 16 > 64MB (65536 KiB) | 17 > 128 MB (131072 KiB)
        
'time_cost'   => 4,
        
'threads'     => 2
    
];
}

$new_hash password_hash($tsData['user_password'], $algorithm$options);

$uid = (int)$data['user_id'];

// Para que sea mucho más legible convendría usarlo asi
db_exec(array(__FILE____LINE__), 'query'"UPDATE u_miembros SET user_password = '{$new_hash}' WHERE user_id = {$uid}") or exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db') ); 

addslashes: Registrate o inicia tu sesión para ver este contenido

Accede al servidor de Discord y descarga ZCode|PHPost
Responder
#16

0
(05-16-2026, 11:34 AM)Miguel92 escribió: Debes agradecer para ver el contenido...
(05-16-2026, 09:23 AM)Tronlar escribió: Debes agradecer para ver el contenido...Ya se lo he puesto, ayer por la noche me puse a estudiarlo y lo he terminado esta mañana, ya funciona bien el registro y el login, lo he puesto así,
le he añadido addslashes() porque el hash de Argon2id contiene caracteres como $ y podrían dar problemas sin escapar.
 
$new_hash defined('PASSWORD_ARGON2ID')
    ? 
password_hash($_POST['pass'], PASSWORD_ARGON2ID, ['memory_cost' => 65536'time_cost' => 4'threads' => 2])
    : 
password_hash($_POST['pass'], PASSWORD_BCRYPT);
    
db_exec(array(__FILE____LINE__), 'query''UPDATE u_miembros SET user_password = \''.addslashes($new_hash).'\' WHERE user_id = \''.$data['user_id'].'\'') or exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db') ); 

No, el símbolo $ no va a dar problemas, además el hash no contiene comillas por lo cual addslashes no va a ser nada en realidad, crea una clase para centralizar lo del password hash, así solo creas la contraseña y la verificas, evitándote copiar todo eso.
 
$algorithm defined('PASSWORD_ARGON2ID') ? PASSWORD_ARGON2ID : (
     
defined('PASSWORD_ARGON2I') ? PASSWORD_ARGON2I PASSWORD_BCRYPT
);

$options = ['cost' => 12]; // default
if (in_array($algorithm, [PASSWORD_ARGON2IDPASSWORD_ARGON2I], true)) {
    
$options = [
        
'memory_cost' => << 16// 16 > 64MB (65536 KiB) | 17 > 128 MB (131072 KiB)
        
'time_cost'   => 4,
        
'threads'     => 2
    
];
}

$new_hash password_hash($tsData['user_password'], $algorithm$options);

$uid = (int)$data['user_id'];

// Para que sea mucho más legible convendría usarlo asi
db_exec(array(__FILE____LINE__), 'query'"UPDATE u_miembros SET user_password = '{$new_hash}' WHERE user_id = {$uid}") or exit( show_error('Error al ejecutar la consulta de la l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db') ); 

addslashes:

Con eso que propones si el servidor de la base de datos se satura, se cae, o la tabla u_miembros se corrompe por un fallo del sistema, la consulta va a fallar, va a decir, Error al ejecutar la consulta de la línea 20 de /var/www/html/vhosts/tuweb/includes/password.php., para un usuario normal ve un error y ve eso solo, un error, para uno que venga con la intención de atacar le estás dando la ruta interna de los archivos, sistema operativo, la estructura del servidor...
 
or exit( show_error('... l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db') ); 


Sería así
$algorithm defined('PASSWORD_ARGON2ID') ? PASSWORD_ARGON2ID PASSWORD_BCRYPT;

$options = [];
if (
$algorithm === PASSWORD_ARGON2ID) {
    
$options = [
        
'memory_cost' => 65536// 64 MB
        
'time_cost'   => 4,
        
'threads'     => 2
    
];
}

$new_hash password_hash($tsData['user_password'], $algorithm$options);
$uid = (int)$data['user_id'];
$sql "UPDATE u_miembros SET user_password = '{$new_hash}' WHERE user_id = {$uid}";
db_exec(array(__FILE____LINE__), 'query'$sql) or exit(show_error('Error en la base de datos.''db')); 
Responder
#17

0
(05-16-2026, 12:17 PM)Tronlar escribió: Debes agradecer para ver el contenido...Con eso que propones si el servidor de la base de datos se satura, se cae, o la tabla u_miembros se corrompe por un fallo del sistema, la consulta va a fallar, va a decir, Error al ejecutar la consulta de la línea 20 de /var/www/html/vhosts/tuweb/includes/password.php., para un usuario normal ve un error y ve eso solo, un error, para uno que venga con la intención de atacar le estás dando la ruta interna de los archivos, sistema operativo, la estructura del servidor...
 
or exit( show_error('... l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db') ); 

Sería así
$algorithm defined('PASSWORD_ARGON2ID') ? PASSWORD_ARGON2ID PASSWORD_BCRYPT;

$options = [];
if (
$algorithm === PASSWORD_ARGON2ID) {
    
$options = [
        
'memory_cost' => 65536// 64 MB
        
'time_cost'   => 4,
        
'threads'     => 2
    
];
}

$new_hash password_hash($tsData['user_password'], $algorithm$options);
$uid = (int)$data['user_id'];
$sql "UPDATE u_miembros SET user_password = '{$new_hash}' WHERE user_id = {$uid}";
db_exec(array(__FILE____LINE__), 'query'$sql) or exit(show_error('Error en la base de datos.''db')); 

Evitar ese "problema", solo debes agregar un excepción debajo del $new_hash y esto evita que continúe.
$new_hash password_hash($tsData['user_password'], $algorithm$options);
if (
$new_hash === false) {
    throw new 
RuntimeException('Error al generar hash de contraseña');


Accede al servidor de Discord y descarga ZCode|PHPost
Responder
#18

0
(05-16-2026, 12:55 PM)Miguel92 escribió: Debes agradecer para ver el contenido...
(05-16-2026, 12:17 PM)Tronlar escribió: Debes agradecer para ver el contenido...Con eso que propones si el servidor de la base de datos se satura, se cae, o la tabla u_miembros se corrompe por un fallo del sistema, la consulta va a fallar, va a decir, Error al ejecutar la consulta de la línea 20 de /var/www/html/vhosts/tuweb/includes/password.php., para un usuario normal ve un error y ve eso solo, un error, para uno que venga con la intención de atacar le estás dando la ruta interna de los archivos, sistema operativo, la estructura del servidor...
 
or exit( show_error('... l&iacute;nea '.__LINE__.' de '.__FILE__.'.''db') ); 

Sería así
$algorithm defined('PASSWORD_ARGON2ID') ? PASSWORD_ARGON2ID PASSWORD_BCRYPT;

$options = [];
if (
$algorithm === PASSWORD_ARGON2ID) {
    
$options = [
        
'memory_cost' => 65536// 64 MB
        
'time_cost'   => 4,
        
'threads'     => 2
    
];
}

$new_hash password_hash($tsData['user_password'], $algorithm$options);
$uid = (int)$data['user_id'];
$sql "UPDATE u_miembros SET user_password = '{$new_hash}' WHERE user_id = {$uid}";
db_exec(array(__FILE____LINE__), 'query'$sql) or exit(show_error('Error en la base de datos.''db')); 

Evitar ese "problema", solo debes agregar un excepción debajo del $new_hash y esto evita que continúe.
$new_hash password_hash($tsData['user_password'], $algorithm$options);
if (
$new_hash === false) {
    throw new 
RuntimeException('Error al generar hash de contraseña');


Si, eso hay que tenerlo en cuenta antes, el usuario no va a saber ponerle lo que dices después y tiene una vulnerabilidad ahí.

Mejorado:
 
$algorithm PASSWORD_ARGON2ID;

$options = [
    
'memory_cost' => 65536// 64 MB
    
'time_cost'   => 4,
    
'threads'     => 2
];
$password $tsData['user_password'] ?? '';
if (!
is_string($password) || trim($password) === '') {
    exit(
show_error('La contraseña no puede estar vacía.''input'));
}
$new_hash password_hash($password$algorithm$options);
if (
$new_hash === false) {
    exit(
show_error('Error al generar el hash de la contraseña.''security'));
}
$uid = (int)($data['user_id'] ?? 0);
if (
$uid <= 0) {
    exit(
show_error('ID de usuario inválido.''input'));
}
$new_hash_safe addslashes($new_hash);
$sql "
    UPDATE u_miembros 
    SET user_password = '
{$new_hash_safe}
    WHERE user_id = 
{$uid}
"
;
$result db_exec([__FILE____LINE__], 'query'$sql);
if (!
$result) {
    exit(
show_error('Error en la base de datos al actualizar la contraseña.''db'));

Responder
#19

0
cuando sale la version
Responder
#20

0
Cuando subas el script o alguna demo voy a intentar aplicar alguna plantilla un poco mas moderna al script ahora que tengo tiempo
Responder


Compartir en:

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)