¡Bienvenido a PHPost!

Para participar en el foro, descargar complementos y acceder al chat, es necesario tener una cuenta activa. Regístrate con un correo válido para completar la activación.

📦 Foro Archivado — Risus 1.3

Risus 1.3 ha finalizado su ciclo de vida y ya no recibe mantenimiento, soporte técnico ni actualizaciones de seguridad. Esta sección se conserva únicamente como archivo histórico y repositorio de descargas para consulta de la comunidad.

Importante: Esta versión contiene vulnerabilidades de seguridad conocidas que han sido corregidas en Risus Nova. No se recomienda utilizar Risus 1.3 en instalaciones nuevas ni en sitios expuestos a Internet.

Si encuentras un tema, complemento o modificación desarrollada para Risus 1.3 que te interese utilizar, no es necesario instalar una versión obsoleta. Puedes solicitar su adaptación en la sección de pedidos de Risus Nova para que sea compatible con la versión actual.

Gracias a todos los usuarios que formaron parte de la etapa de Risus 1.3. El desarrollo continúa en Risus Nova, donde se concentran todas las mejoras, correcciones y nuevas funcionalidades del proyecto.

⚖️ Aviso Legal y Normas de Contenido

PHPost.es es una comunidad dedicada al soporte, desarrollo y difusión de software libre para la creación y administración de comunidades en línea.

Compromiso con la legalidad: No se permite la publicación, promoción o distribución de software pirateado, contenido warez ni material que infrinja derechos de autor o cualquier otra normativa aplicable.

Responsabilidad: Cada usuario es responsable del contenido alojado en su propio sitio web y del uso que haga del software. Los administradores y desarrolladores de Risus Nova no controlan ni supervisan los servidores o contenidos gestionados por terceros.

⚠️ Aviso de seguridad

Risus Nova se distribuye únicamente a través de phpost.es, que es la fuente oficial del proyecto donde publicamos las versiones verificadas.

Recomendamos no utilizar copias obtenidas desde sitios de terceros, ya que podrían haber sido modificadas y no contar con la integridad del código original, lo que puede suponer riesgos de seguridad en la instalación.

Para garantizar una instalación segura y actualizada, descarga siempre la versión oficial desde el botón disponible en esta página.

Importante: No pediremos donaciones en ningún momento ni en ninguna plataforma (Ko-fi, PayPal, redes sociales u otras). Si encuentras campañas de donación que utilicen el nombre de Risus Nova o PHPost, no tienen ninguna relación con el proyecto.

🔄 Desarrollo activo

Risus Nova forma parte de una nueva etapa del proyecto PHPost, en evolución constante con mejoras, correcciones y nuevas funciones. Puedes seguir el progreso y los cambios oficiales a través del changelog y la comunidad.

Risus Nova 2.1 Estable Desarrollo activo Última actualización: 21/07/2026 Ver Demo Changelog 278 Desarrollo del tema: 75% (fase actual de desarrollo) Descargar
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 Di‌s‌c‌o‌r‌d y descarga ZCo‌d‌e PHPo‌s‌t

D​i​s​c​o​r​d: d‌iscord.gg/StWZtrt2DE (lo tienen que escribir)
Responder Compartir
#12

1
(05-16-2026, 01:01 AM)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 Compartir
#13

1
(05-16-2026, 02:33 AM)Tronlar escribió: Debes agradecer para ver el contenido...
(05-16-2026, 01:01 AM)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 Di‌s‌c‌o‌r‌d y descarga ZCo‌d‌e PHPo‌s‌t

D​i​s​c​o​r​d: d‌iscord.gg/StWZtrt2DE (lo tienen que escribir)
Responder Compartir
#14

0
(05-16-2026, 03:04 AM)Miguel92 escribió: Debes agradecer para ver el contenido...
(05-16-2026, 02:33 AM)Tronlar escribió: Debes agradecer para ver el contenido...
(05-16-2026, 01:01 AM)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 Compartir
#15

1
(05-16-2026, 11: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 Di‌s‌c‌o‌r‌d y descarga ZCo‌d‌e PHPo‌s‌t

D​i​s​c​o​r​d: d‌iscord.gg/StWZtrt2DE (lo tienen que escribir)
Responder Compartir
#16

0
(05-16-2026, 01:34 PM)Miguel92 escribió: Debes agradecer para ver el contenido...
(05-16-2026, 11: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 Compartir
#17

0
(05-16-2026, 02: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 Di‌s‌c‌o‌r‌d y descarga ZCo‌d‌e PHPo‌s‌t

D​i​s​c​o​r​d: d‌iscord.gg/StWZtrt2DE (lo tienen que escribir)
Responder Compartir
#18

0
(05-16-2026, 02:55 PM)Miguel92 escribió: Debes agradecer para ver el contenido...
(05-16-2026, 02: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 Compartir
#19

0
cuando sale la version
Responder Compartir
#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


Compartir en:

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)