Si decide utilizar X-XSS-Protection
, debe configurarlo para cualquier página que pueda ejecutar contenido de script activo. Los formatos no ejecutables como CSS o imágenes no se ven afectados por el encabezado.
Tenga en cuenta que las imágenes SVG, a pesar de poder ejecutar el código de script, aparentemente no respetan el encabezado en Chrome, lo que sugiere que solo se aplica a documentos HTML. Prueba de concepto:
<?php
header('X-XSS-Protection: 1; mode=block');
header('Content-type: image/svg+xml');
?>
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg">
<?php echo $_GET['foo']; ?>
</svg>
Ejecutalo en tu navegador de esta manera: http://localhost/xss.php?foo=<script>alert(1)</script>
En mis pruebas, el JS reflejado del parámetro se ejecuta aunque el filtro XSS está activo. Pero si cambia el tipo de contenido a text/html
, el JS se filtrará correctamente.
(Tenga en cuenta que el uso del encabezado X-XSS-Protection
es controvertido y puede da como resultado nuevas vulnerabilidades, por lo que Facebook incluso decidió desactivar por completo el auditor XSS. Y tenga en cuenta que configurar el encabezado no reemplaza el escape adecuado de la salida).