feat(security): Implementar sistema de contraseñas seguro con hashing
- Añadir hashing bcrypt para todas las contraseñas nuevas y existentes - Implementar verificación segura con password_hash() y password_verify() - Migrar 10 contraseñas existentes de texto plano a formato hash - Agregar protección CSRF en formulario de login - Implementar rate limiting (5 intentos/minuto) contra fuerza bruta - Mejorar formulario de edición con campos de contraseña seguros - Agregar validación de coincidencia y longitud mínima de contraseñas - Sanitización de inputs y validación de formato de email - Prevenir exposición de hashes en interfaz de usuario Cambia vulnerabilidad crítica donde las contraseñas se almacenaban y viajaban en texto plano.
This commit is contained in:
@@ -391,10 +391,9 @@ $this->Util()->ValidateMail($value, "Email");
|
||||
}
|
||||
}
|
||||
|
||||
// CAMBIO CRÍTICO: Obtener empresaId dinámicamente del usuario con BD real
|
||||
$sql = "SELECT usuarioId, empresaId FROM usuario
|
||||
// CAMBIO DE SEGURIDAD: Obtener usuario por email primero (sin contraseña)
|
||||
$sql = "SELECT usuarioId, empresaId, password FROM usuario
|
||||
WHERE email = '".$this->email."'
|
||||
AND password = '".$this->password."'
|
||||
AND baja = '0'";
|
||||
|
||||
$result = $masterConnection->query($sql);
|
||||
@@ -410,7 +409,21 @@ $this->Util()->ValidateMail($value, "Email");
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Verificar contraseña usando método seguro
|
||||
$usuario = new Usuario();
|
||||
$usuario->setUsuarioId($row['usuarioId']);
|
||||
if(!$usuario->verifyPassword($this->password, $row['password']))
|
||||
{
|
||||
unset($_SESSION["loginKey"]);
|
||||
unset($_SESSION["empresaId"]);
|
||||
$this->Util()->setError(10006, "error");
|
||||
|
||||
if($this->Util()->PrintErrors())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Obtener datos del usuario de forma segura
|
||||
|
||||
Reference in New Issue
Block a user