Configuraciones Avanzadas de Seguridad
Esta sección cubre técnicas y configuraciones avanzadas para mejorar la seguridad de aplicaciones web utilizando el inspector de elementos como herramienta de análisis y verificación.
Configuración avanzada de HTTPS
OCSP Stapling
Mejora la privacidad y rendimiento de la verificación de certificados.
# Ejemplo en Nginx
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/ca-certs.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
Certificate Transparency
Implementa registros CT para detectar certificados fraudulentos:
Expect-CT: max-age=86400, enforce, report-uri="https://example.com/report-ct"
HPKP (con precaución)
HTTP Public Key Pinning protege contra certificados falsificados:
Public-Key-Pins: pin-sha256="base64=="; pin-sha256="base64=="; max-age=5184000; includeSubDomains
Nota: Implementar HPKP con extrema precaución, pues puede bloquear acceso al sitio si se configura incorrectamente.
CSP avanzada
Nonces y hashes
Para permitir scripts inline específicos sin 'unsafe-inline':
<script nonce="2726c7f26c">
// Script seguro
</script>
Content-Security-Policy: script-src 'self' 'nonce-2726c7f26c'
Para scripts estáticos:
Content-Security-Policy: script-src 'self' 'sha256-qznLcsROx4GACP2dm0UCKCzCG+HiZ1guq6ZZDob/Tng='
Directivas modernas
Content-Security-Policy:
script-src 'self';
style-src 'self';
img-src 'self';
font-src 'self';
connect-src 'self';
frame-ancestors 'none';
base-uri 'self';
form-action 'self';
object-src 'none';
require-trusted-types-for 'script';
trusted-types default;
upgrade-insecure-requests;
CSP en meta tags
Para sitios sin acceso a configuración de servidor:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
Subresource Integrity (SRI)
Verifica la integridad de recursos externos:
<script src="https://cdn.example.com/script.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous">
</script>
Verifica la implementación con el inspector:
- Panel Elements > Ver atributos del elemento script
- Panel Network > Ver si la integridad se verificó correctamente
Configuración de Fetch Metadata
Protección contra ataques CSRF y abuso de recursos:
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Implementación con políticas en el servidor:
# Ejemplo de política de aislamiento
if (request.headers['sec-fetch-site'] != 'same-origin' &&
(request.headers['sec-fetch-dest'] == 'document' ||
request.method == 'POST')) {
return forbidden();
}
Cross-Origin Resource Policy (CORP)
Protección contra ataques de filtración de información:
Cross-Origin-Resource-Policy: same-origin
Cross-Origin Opener Policy (COOP)
Aislamiento de sitios cruzados:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin Embedder Policy (COEP)
Controla qué recursos pueden incrustarse:
Cross-Origin-Embedder-Policy: require-corp
Análisis avanzado con el inspector
Depuración de Trusted Types
- Habilitar CSP con require-trusted-types-for
- Usar la consola para depurar violaciones de Trusted Types
- Verificar la creación de políticas de confianza
Análisis de WebAssembly
- Examinar módulos WASM cargados en la aplicación
- Verificar fuentes e integridad de estos módulos
- Comprobar que solo se cargan desde orígenes confiables
Inspección de Service Workers
- Abrir la pestaña Application
- Examinar Service Workers registrados
- Verificar el origen y alcance de cada Service Worker
- Comprobar las políticas de actualización
Hardening adicional
Secure DevTools
Configura el servidor para detectar y bloquear intentos de manipulación vía DevTools:
// Detección de DevTools abiertos (implementar con precaución)
const devToolsOpen = () => {
const threshold = 160;
return window.outerWidth - window.innerWidth > threshold ||
window.outerHeight - window.innerHeight > threshold;
};
// Acción al detectar DevTools
if (devToolsOpen()) {
// Registro de evento o acción defensiva
}
Ofuscación selectiva
Protege código sensible con ofuscación, verificable con el inspector:
// Antes de ofuscación
function validateToken(token) {
return token === storedToken;
}
// Después de ofuscación (ejemplo simplificado)
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('9 8(7){6 7===5}',10,10,'|||||storedToken|return|token|validateToken|function'.split('|'),0,{}))
Verificación de seguridad con el inspector
Auditoría de seguridad con Lighthouse
- Abre el inspector y navega a la pestaña Lighthouse
- Selecciona la categoría "Best Practices"
- Ejecuta la auditoría y revisa las recomendaciones de seguridad
- Implementa las mejoras sugeridas y vuelve a verificar
Análisis de vulnerabilidades con la consola
- Monitorea la consola en busca de advertencias de seguridad
- Verifica errores relacionados con CSP, CORS o SRI
- Utiliza
console.table()para registrar y analizar intentos de acceso sospechosos:
// Implementación de monitoreo de seguridad
function securityMonitor() {
const events = [];
document.addEventListener('submit', e => {
events.push({
type: 'form-submit',
target: e.target.action,
timestamp: new Date().toISOString()
});
console.table(events);
});
}
Verificación de cookies seguras
- Abre la pestaña Application > Storage > Cookies
- Verifica que las cookies sensibles tengan los flags:
- HttpOnly
- Secure
- SameSite (Strict o Lax)
- Comprueba fechas de expiración adecuadas
Detección de ataques con el inspector
Identificación de XSS
Utiliza el inspector para verificar la correcta sanitización de datos:
- Inserta datos de prueba en formularios
- Observa cómo se renderizan en el DOM
- Verifica que los caracteres especiales estén correctamente codificados
Detección de clickjacking
- Inspecciona los headers de respuesta para verificar:
X-Frame-Options: DENY
Content-Security-Policy: frame-ancestors 'none' - Prueba la carga del sitio en un iframe para confirmar la protección
Análisis de CSRF
- Examina los tokens CSRF en formularios
- Verifica que los tokens sean:
- Únicos por sesión
- Validados en cada solicitud
- No expuestos en URLs
Conclusión
El inspector de elementos es una herramienta fundamental para verificar la implementación correcta de configuraciones avanzadas de seguridad. Utilizándolo sistemáticamente, los desarrolladores pueden detectar y corregir vulnerabilidades antes de que sean explotadas.
Recuerda que la seguridad es un proceso continuo que requiere monitoreo constante y adaptación a nuevas amenazas y técnicas de protección.