📊 Actividad de Cuenta
Historial de acciones en el sistema
🔍 Buscar en actividad
Actividad reciente
7 registros
| Fecha | Usuario | Acción | Detalles | IP |
|---|---|---|---|---|
| 2026-04-12 16:00:02 | admin |
login_success | Admin login | 192.168.1.100 |
| 2026-04-12 16:00:02 | alice |
login_success | User login | 201.220.45.123 |
| 2026-04-12 16:00:02 | alice |
invoice_view | Viewed invoice #1040 | 201.220.45.123 |
| 2026-04-12 16:00:02 | alice |
invoice_view | Viewed invoice #1041 | 201.220.45.123 |
| 2026-04-12 16:00:02 | bob |
login_success | User login | 186.45.78.90 |
| 2026-04-12 16:00:02 | bob |
invoice_create | Created invoice #1045 | 186.45.78.90 |
| 2026-04-12 16:00:02 | admin |
settings_change | Updated company logo | 192.168.1.100 |
🔴 Log público (vulnerable)
El archivo de log está accesible públicamente:
📄 Ver /logs/app.logContenido actual:
(archivo no existe)
⚠️ Problemas de logging
-
Sin login_failed:
Brute force en A07 no deja rastro -
Log en webroot:
Cualquiera puede leer/logs/app.log -
Log injection:
El buscador escribe directo al log sin sanitizar
🛡️ Cómo arreglarlo
# 1. Loguear intentos fallidos
log_event('login_failed', $user, $ip);
# 2. Mover log fuera del webroot
error_log = /var/log/nexo/app.log
# 3. Sanitizar antes de loguear
$safe = str_replace(
["\r", "\n", "\t"],
['', '', ''],
$input
);
# 4. Configurar alertas
if (failed_attempts > 10) {
send_alert_to_security_team();
}