HttpOnly Cookies - это хорошая мера безопасности, но она не предназначена для остановки XSS, а только усложняет для злоумышленников использование уязвимостей xss. Позвольте мне уточнить.
Систему безопасности xsrf на основе токенов можно обойти с помощью XSS, поэтому злоумышленнику не нужно знать cookie-файл для использования уязвимости xss.
Во избежание подделки межсайтовых запросов I
добавили случайный ключ в скрытый
поле для форм. Этот ключ должен
возвращаться в каждом запросе POST для
запрос должен быть принят.
Например, используя XSS, злоумышленник может выполнить JavaScript, который может прочитать любую страницу в домене, используя xmlhttprequest. Таким образом, используя xmlhttprequest, злоумышленник может прочитать токен XSRF, а затем использовать его для подделки запроса POST. Это связано с тем, что одним из свойств XSS является то, что он допускает перерыв в Same Origin Policy . Например, Здесь - это реальный эксплойт, который я написал и который делает то, что я только что объяснил.
Лучший способ предотвратить XSS - преобразовать мерзкие символы, такие как <>
, в соответствующие им HTML-сущности. В PHP я рекомендую:
$var=htmlspeicalchars($var,ENT_QUOTES);
Это исправит одинарные и двойные кавычки, чтобы остановить Большинство XSS. Даже если результирующий укус находится в HTML-теге. Например, злоумышленник не может использовать этот эксплойт, если вы замените кавычки. Это потому, что злоумышленник должен выйти из кавычек, чтобы выполнить «onload =».
$var="' onload='alert(document.cookie)'";
в этот HTML:
print("<img src='http://HOST/img.php?=".$var."'>");
ОДНАКО , конкретный случай, который вы перечислили с помощью тега <span>
, все еще потенциально является проблемой, поскольку злоумышленнику не нужны кавычки! У вас также будет xss уязвимость, если вы поместите внутрь тега <script>
. Просто будьте уверены в том, где размещается пользовательский ввод, не существует «поймать все» или «серебряная пуля» для всех уязвимостей.
Атака "XST", использующая метод HTTP "TRACE", на практике не является реалистичной. Причина в том, что злоумышленник не может заставить веб-браузер выполнить http-запрос «TRACE». Злоумышленники могут принудительно вызвать методы «GET» и «POST», используя javascript или тег <img>
в случае «GET», но остальная часть заголовка HTTP запрещена. Имейте в виду, что TRACE включен по умолчанию почти во всех системах Apache, если он действительно опасен, он будет удален все вместе. Многие инструменты тестирования безопасности, такие как Nessus, выдают ошибку, если Apache поддерживает TRACE, его также можно легко отключить.