← Blog
// APPSEC · REGEX

Entender una regex (y no tumbar tu servidor con un ReDoS)

Publicado el 18 ago 2026 · 7 min de lectura
AppSecRegexReDoS

Las expresiones regulares son de esas cosas que escribes una vez, copias mil veces y no vuelves a mirar. El problema: una regex que funciona puede a la vez ser ilegible y, peor, un vector de denegación de servicio. Vamos con las dos cosas: leerlas y no dispararte en el pie.

Una regex se lee token a token

No intentes leerla de un vistazo; descomponla. Cada pieza es una de estas:

Ejemplo: ^(?<user>[a-z0-9._%+-]+)@([a-z0-9.-]+)\.[a-z]{2,}$ es «inicio, un grupo con nombre user de una o más letras/dígitos/símbolos, una arroba, un dominio, un punto y un TLD de dos o más letras, fin». Leída así, deja de dar miedo.

🧩 Pégala y te la desgloso: el explicador de Regex descompone cualquier expresión token a token en lenguaje claro, la prueba en vivo resaltando coincidencias y te avisa si es vulnerable a ReDoS. Todo en el navegador.

La trampa: catastrophic backtracking (ReDoS)

El motor de regex, cuando algo puede casar de muchas formas, prueba combinaciones y retrocede (backtracking) cuando falla. Con ciertos patrones, el número de combinaciones crece exponencialmente con la longitud de la entrada. Resultado: una cadena de 30 caracteres puede colgar la CPU durante segundos o minutos. Eso es un ReDoS (Regular expression Denial of Service).

La firma clásica es un cuantificador anidado sobre algo que se solapa:

(a+)+$        # grupo con + , cuantificado con + otra vez
(.*)*         # lo mismo con .*
(\d+)*        # y con \d+
(a|a)*        # alternativa que se solapa, repetida

Con la entrada adecuada (muchas a seguidas de un carácter que rompe la coincidencia), el motor explora todas las particiones posibles. Un caso real famoso fue una regex de validación de correo «mejorada» que tumbaba servicios enteros.

Cómo evitarlo

⚠️ El ReDoS no es teórico: si tu backend valida entradas del usuario con una regex vulnerable, cualquiera puede enviar la cadena que dispara el backtracking y consumir tu CPU. Es un DoS con un solo request.

Encoding no es cifrado (y una regex no es un validador semántico)

Dos avisos que van juntos: una regex valida forma, no intención. Casar el formato de un email no garantiza que exista, ni que un input «limpio» sea seguro para SQL o HTML (para eso, consultas parametrizadas y escapado). La regex es una primera criba, no la defensa.

Checklist

Una buena regex es la que entiendes de un vistazo y no puede tumbarte. Si no cumple las dos, reescríbela.

Comparte: LinkedIn X
Sergio Belmonte Morales
Sergio Belmonte Morales
Analista de Ciberseguridad · SOC · Especialista en Sentinel/KQL