Класс HtmlSanitizer
Класс HtmlSanitizer предназначен для безопасной
очистки HTML-строк. Он удаляет опасные теги, скрипты
и атрибуты, которые могут привести к XSS-атакам.
Объект класса создаётся с помощью сервиса
HtmlSanitizerInterface. Первым параметром
в методы передаётся очищаемая HTML-строка, вторым -
контекст использования (например, 'default'
или 'markdown').
Синтаксис
<?php
use Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface;
$sanitizer = new HtmlSanitizer($config);
$res = $sanitizer->sanitize($html, $context);
$res = $sanitizer->sanitizeFor($context, $html);
?>
Пример
Давайте очистим HTML-строку от опасного тега script:
<?php
use Symfony\Component\HtmlSanitizer\HtmlSanitizer;
use Symfony\Component\HtmlSanitizer\HtmlSanitizerConfig;
$config = (new HtmlSanitizerConfig())
->allowSafeElements();
$sanitizer = new HtmlSanitizer($config);
$html = '<p>hello</p><script>alert("abcde")</script>';
$res = $sanitizer->sanitize($html);
echo $res;
?>
Результат выполнения кода:
<p>hello</p>
Пример
Давайте очистим HTML для конкретного контекста
'markdown' с помощью метода sanitizeFor:
<?php
use Symfony\Component\HtmlSanitizer\HtmlSanitizer;
use Symfony\Component\HtmlSanitizer\HtmlSanitizerConfig;
$config = (new HtmlSanitizerConfig())
->allowSafeElements()
->allowElement('a', ['href']);
$sanitizer = new HtmlSanitizer($config);
$html = '<a href="/user" onclick="alert(1)">user</a>';
$res = $sanitizer->sanitizeFor('markdown', $html);
echo $res;
?>
Результат выполнения кода:
<a href="/user">user</a>
Пример
Давайте очистим строку с опасным атрибутом onmouseover:
<?php
use Symfony\Component\HtmlSanitizer\HtmlSanitizer;
use Symfony\Component\HtmlSanitizer\HtmlSanitizerConfig;
$config = (new HtmlSanitizerConfig())
->allowSafeElements();
$sanitizer = new HtmlSanitizer($config);
$html = '<p onmouseover="alert(1)">article</p>';
$res = $sanitizer->sanitize($html);
echo $res;
?>
Результат выполнения кода:
<p>article</p>
Смотрите также
-
метод
sanitize,
который очищает HTML-строку -
метод
sanitizeFor,
который очищает HTML для заданного контекста -
класс
Yaml,
который парсит и создаёт YAML-строки -
класс
ExpressionLanguage,
который вычисляет выражения