Я могу придумать несколько различных атак, может быть, есть и другие, которые, как мы надеемся, добавят другие. :)
Если ваш XSS - это просто какое-то значение заголовка, отраженное в ответе unencoded, я бы сказал, что это меньше риска по сравнению с сохраненным. Однако могут быть факторы, которые следует учитывать. Например, если это заголовок, который браузер добавляет и может быть установлен в браузере (например, пользовательский агент), злоумышленник может получить доступ к клиентскому компьютеру, изменить агент пользователя, а затем позволить обычным пользователям использовать веб-сайт, теперь с помощью javascript атакующего. Еще один пример, который приходит на ум, - это веб-сайт, на котором может отображаться URL-адрес, который перенаправил вас туда (референт) - в этом случае злоумышленник должен только ссылаться на уязвимое приложение из своего тщательно продуманного URL-адреса. Однако это кросс-кейсы.
Если он хранится, это более просто. Рассмотрим приложение, которое регистрирует доступ пользователей со всеми заголовками запросов, и давайте предположим, что для администраторов используется внутреннее приложение для проверки журналов. Если это приложение для просмотра журналов основано на веб-интерфейсе и уязвимо, любой javascript из любого заголовка запроса может быть запущен в контексте администратора. Очевидно, это всего лишь один пример: не обязательно быть слепым.
Cache poisoning также может помочь с использованием заголовка XSS.
Еще одна вещь, о которой я могу думать, - это плагины для браузера. Flash сейчас слабее (к счастью), но с разными версиями Flash вы можете установить разные запросы в своих запросах. What exactly you can and cannot set - беспорядок и очень запутывает версии Flash-плагина.
Таким образом, существует несколько атак, и необходимо обрабатывать все заголовки как пользовательский ввод и соответственно кодировать их.