Se decidi di utilizzare X-XSS-Protection
, dovresti impostarlo per qualsiasi pagina in grado di eseguire contenuti di script attivi. I formati non eseguibili come CSS o immagini non sono influenzati dall'intestazione.
Si noti che le immagini SVG, nonostante siano in grado di eseguire il codice di script, a quanto pare non rispettano l'intestazione in Chrome, il che suggerisce che si applica solo ai documenti HTML. Prova del concetto:
<?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>
Eseguilo nel tuo browser in questo modo: http://localhost/xss.php?foo=<script>alert(1)</script>
Nei miei test, il JS riflesso dal parametro viene eseguito anche se il filtro XSS è attivo. Ma se cambi il tipo di contenuto in text/html
, il JS sarà filtrato correttamente.
(Si noti inoltre che l'uso dell'intestazione X-XSS-Protection
è controverso e può si traducono in nuove vulnerabilità ed è per questo motivo che Facebook ha deciso di disattivare completamente l'auditor XSS ed essere consapevole che l'impostazione dell'intestazione non sostituisce l'uscita corretta dell'output.