Ответ
XSS-атака (Cross-Site Scripting) — это эксплуатация уязвимости в веб-приложении, при которой злоумышленник заставляет браузер жертвы выполнить вредоносный JavaScript-код. Целью атаки часто является кража сессионных кук, подмена содержимого страницы, перенаправление пользователя на фишинговый сайт или выполнение действий от имени пользователя.
Механизм отражённой (Reflected) XSS-атаки:
- Злоумышленник обнаруживает, что параметр в URL (например,
search) отражается на странице без экранирования. - Он создаёт специальную ссылку, содержащую скрипт:
https://vuln-site.com/search?q=<script>alert(document.cookie)</script>. - Жертва переходит по этой ссылке (например, из письма).
- Сервер возвращает страницу с внедрённым скриптом, который выполняется в браузере жертвы, похищая её куки.
Практический пример защиты в современном PHP-фреймворке (Laravel Blade): Шаблонизатор Blade по умолчанию экранирует все выводимые данные, что является основной защитой.
// В контроллере
return view('profile', ['username' => $request->input('username')]);
<!-- В шаблоне Blade (profile.blade.php) -->
<div>Hello, {{ $username }}!</div> <!-- Данные автоматически экранированы -->
Даже если $username содержит <script>, он будет выведен как безопасный текст: <script>.
Дополнительные меры:
- Для вывода доверенного HTML-кода (который вы сами сгенерировали и проверили) используйте
{!! $html !!}с крайней осторожностью. - Всегда применяйте CSP (Content Security Policy). Пример заголовка, запрещающего выполнение встроенных скриптов (
unsafe-inline):Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com;Этот заголовок заблокирует выполнение любого скрипта, внедрённого через XSS, если его источник не
'self'илиhttps://trusted.cdn.com.