Что такое XSS-атака?

«Что такое XSS-атака?» — вопрос из категории Безопасность, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

XSS-атака (Cross-Site Scripting) — это эксплуатация уязвимости в веб-приложении, при которой злоумышленник заставляет браузер жертвы выполнить вредоносный JavaScript-код. Целью атаки часто является кража сессионных кук, подмена содержимого страницы, перенаправление пользователя на фишинговый сайт или выполнение действий от имени пользователя.

Механизм отражённой (Reflected) XSS-атаки:

  1. Злоумышленник обнаруживает, что параметр в URL (например, search) отражается на странице без экранирования.
  2. Он создаёт специальную ссылку, содержащую скрипт: https://vuln-site.com/search?q=<script>alert(document.cookie)</script>.
  3. Жертва переходит по этой ссылке (например, из письма).
  4. Сервер возвращает страницу с внедрённым скриптом, который выполняется в браузере жертвы, похищая её куки.

Практический пример защиты в современном PHP-фреймворке (Laravel Blade): Шаблонизатор Blade по умолчанию экранирует все выводимые данные, что является основной защитой.

// В контроллере
return view('profile', ['username' => $request->input('username')]);
<!-- В шаблоне Blade (profile.blade.php) -->
<div>Hello, {{ $username }}!</div> <!-- Данные автоматически экранированы -->

Даже если $username содержит <script>, он будет выведен как безопасный текст: &lt;script&gt;.

Дополнительные меры:

  • Для вывода доверенного 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.