XSS: Межсайтовый скриптинг - Основые уязвимости веб-приложений
Primary tabs
Forums:
XSS (Cross-Site Scripting) — «межсайтовый скриптинг» - группа уязвимостей, позволяющих выполнить, на открымой пользователем веб-странице код/действие, не предусмотренной разработчиками.
Используют сокращение «XSS», чтобы не было путаницы с каскадными таблицами стилей, использующими сокращение «CSS».

Прежде всего под этой группой подразумеваются проблемы безопасности, которые позволяют внедрить код на фронтэнд-часть приложений и запустить его уже на компьютере других пользователей.
Основной сценарий
Основной сценарий - сохранение (через веб-форму) на сервер, такого текста/контента, который будет выполнен браузером (напр. внедрение Javascript)
Принцип атаки - на примере формы
- На сайте есть форма для публикации сообщения.
- Через эту форму хакер вместо простого текста отправляет JS-код.
- Сообщение публикуется на странице, которая доступна всем посетителям.
- Вредоносный код выполняется для каждого посетителя этой страницы.
- Вредоносный скрипт вредит пользователям сайта. Например, крадёт их куки.
Но XSS при этом может быть и просто в скинутой ссылке:http://example.com/?search=<script>alert('xss')</script>>
Как защититься
Как и в случае с SQL иъекциями - экранировать пользовательский ввод, заменяя спец-последовательности, которые воспринимаются браузером как HTML тэги
Вариант решения проблемы
Надо обезопасить страницу, отфильтровав информацию из формы с помощью HTML-мнемоник (кодовое представление символа в HTML, который начинается со знака амперсанда & и завершается точкой с запятой ;).
Теги <script> состоят из треугольных скобок, а значит, если их заменить на мнемоники, то такой текст больше не будет трактоваться браузером как HTML-тег. Мнемоники часто используются, когда надо показать пользователю фрагмент с HTML-кодом на странице.
PHP - Применение функции фильтрации htmlspecialchars()
В PHP функция htmlspecialchars для переданной строки выполнит фильтрацию и заменит все опасные символы в ней на подходящие HTML-мнемоники. Пример:
$text = "<script><script>"; // от пользователя $safe_str = htmlspecialchars($text); // фильтруем print($safe_str); // узнаём, что получилось
Результат работы этого сценария: <script></script>
Видео-материалы
- XSS: Межсайтовый скриптинг:
- тг: https://t.me/prgblg/69
- вк: https://vkvideo.ru/video-58271214_456239523
- ютуб: https://youtu.be/QF71S7EjPKI
Используемая литература (что еще почитать)
- learn.snyk.io - Cross-site scripting (XSS): https://learn.snyk.io/lesson/xss/?ecosystem=javascript
- Prevent XSS injection by setting HttpOnly to true: https://docs.datadoghq.com/security/code_security/static_analysis/static_analysis_rules/go-security/cookie-http-only/
- Log in to post comments
- 476 reads