Introducción

La seguridad de un sitio web no solo depende de firewalls o plugins. Una forma muy eficaz de detectar ataques tempranos es implementar un sistema que avise cuando haya accesos sospechosos, como muchos intentos desde la misma IP, bots o scrapers masivos.

En este artículo te enseño cómo crear un sistema de alertas ante accesos sospechosos en PHP. Está pensado tanto para desarrolladores como para quienes no tienen conocimientos técnicos.

Índice

1. Por qué detectar accesos sospechosos

  • 🔐 Identificar ataques de fuerza bruta (múltiples intentos de login).
  • 📈 Detectar scrapers que copian datos de tu web.
  • 🚨 Evitar saturación de tu servidor por bots no deseados.

2. Datos recomendados a registrar

DatoDescripción
IPIdentificar el origen de la visita.
User-AgentNavegador o bot que hace la petición.
URL accedidaPágina que intenta visitar.
Fecha y horaPara analizar patrones de comportamiento.
Recuento de accesosNúmero de veces que la IP ha accedido.

3. Script PHP para registrar accesos y disparar alertas

A continuación un script PHP que:

  • Registra accesos en un archivo de log.
  • Cuenta cuántas veces se repite una misma IP.
  • Dispara un email de alerta si una IP supera 50 accesos en 10 minutos.
<?php
// Configuración
$limite = 50; // Máximo accesos permitidos
$tiempo = 600; // Segundos (10 min)
$ip = $_SERVER['REMOTE_ADDR'] ?? 'desconocida';
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? 'desconocido';
$url = $_SERVER['REQUEST_URI'] ?? 'desconocido';
$time = time();

$registro = "$time|$ip|$user_agent|$url\n";
file_put_contents(__DIR__.'/logs/accesos.log', $registro, FILE_APPEND);

// Analizar el log
$conteo = 0;
$lines = file(__DIR__.'/logs/accesos.log');
foreach ($lines as $line) {
    list($log_time, $log_ip) = explode('|', $line);
    if ($ip == $log_ip && ($time - (int)$log_time) < $tiempo) {
        $conteo++;
    }
}

if ($conteo > $limite) {
    $mensaje = "Alerta: La IP $ip ha accedido $conteo veces en los últimos 10 minutos.";
    mail("tuseguridad@tuweb.com", "Alerta de Acceso Sospechoso", $mensaje);
}
?>

Explicación:

  • Guarda cada acceso en un log separado por pipe (|).
  • Cuenta cuántas veces aparece la misma IP en los últimos 10 minutos.
  • Envía un correo si supera el límite configurado.

4. Ejemplo de log generado

1718123456|203.0.113.45|Mozilla/5.0|/login
1718123460|203.0.113.45|Mozilla/5.0|/login

Esto facilita revisar qué URLs son atacadas y con qué frecuencia.

5. Buenas prácticas y RGPD

  • 💾 Borra o rota el log cada cierto tiempo.
  • 🔐 Guarda el archivo de log fuera de la carpeta pública.
  • ⚖️ Informa en tu política de privacidad si registras IPs.

6. Conclusión

Con un script sencillo en PHP puedes detectar patrones sospechosos y proteger tu web antes de que un ataque tenga éxito.

📩 ¿Quieres implementar algo más avanzado con panel y alertas? ¡Contáctanos!

Ir al contenido