366  /  382
Справочник

Санитайзер

Просмотров: 27404
Дата последнего изменения: 16.11.2023
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Санитайзер - инструмент, анализирующий введённый пользователем html код. Основная задача санитайзера - предотвратить внедрение/вывод на экран потенциально опасного кода в HTML.

Санитайзер удобно использовать там, где пользователь вводит произвольный html. Например, в визуальном редакторе или при копировании текста из MS Word. Кроме функций контроля введённого кода санитайзер частично отслеживает валидность вёрстки, в частности закрывает незакрытые теги.

Как фильтровать текст

Если необходимо отфильтровать текст (содержащий HTML - тэги) введенный пользователем от нежелательных тэгов HTML с помощью санитайзера, то можно это сделать так:

$Sanitizer = new CBXSanitizer;

$Sanitizer->AddTags( array (
	'a' = > array('href','id','style','alt'...),
	'br' => array(),
	.... ));

$pureHtml = $Sanitizer->SanitizeHtml($html);

Санитайзер отфильтрует все тэги и атрибуты, которые не содержатся в "белом" списке, сформированном функцией AddTags().

В санитайзер включены 3 преднастроенных уровня фильтрации:

SECURE_LEVEL_HIGH (высокий уровень) включает следующий список:

$arTags = array(
	'b'        => array(),
	'br'        => array(),
	'big'        => array(),
	'blockquote'    => array(),
	'code'        => array(),
	'del'        => array(),
	'dt'        => array(),
	'dd'        => array(),
	'font'        => array(),
	'h1'        => array(),
	'h2'        => array(),
	'h3'        => array(),
	'h4'        => array(),
	'h5'        => array(),
	'h6'        => array(),
	'hr'        => array(),
	'i'        => array(),
	'ins'        => array(),
	'li'        => array(),
	'ol'        => array(),
	'p'        => array(),
	'small'        => array(),
	's'        => array(),
	'sub'        => array(),
	'sup'        => array(),
	'strong'    => array(),
	'pre'        => array(),
	'u'        => array(),
	'ul'        => array()
);

SECURE_LEVEL_MIDDLE (средний уровень) включает в себя:

$arTags = array(
	'a'        => array('href', 'title','name','alt'),
	'b'        => array(),
	'br'        => array(),
	'big'        => array(),
	'blockquote'    => array('title'),
	'code'        => array(),
	'caption'    => array(),
	'del'        => array('title'),
	'dt'        => array(),
	'dd'        => array(),
	'font'        => array('color','size'),
	'color'        => array(),
	'h1'        => array(),
	'h2'        => array(),
	'h3'        => array(),
	'h4'        => array(),
	'h5'        => array(),
	'h6'        => array(),
	'hr'        => array(),
	'i'        => array(),
	'img'        => array('src','alt','height','width','title'),
	'ins'        => array('title'),
	'li'        => array(),
	'ol'        => array(),
	'p'        => array(),
	'pre'        => array(),
	's'        => array(),
	'small'        => array(),
	'strong'    => array(),
	'sub'        => array(),
	'sup'        => array(),
	'table'        => array('border','width'),
	'tbody'        => array('align','valign'),
	'td'        => array('width','height','align','valign'),
	'tfoot'        => array('align','valign'),
	'th'        => array('width','height'),
	'thead'        => array('align','valign'),
	'tr'        => array('align','valign'),
	'u'        => array(),
	'ul'        => array()
);

SECURE_LEVEL_LOW (низкий уровень) включает в себя:

$arTags = array(
	'a'        => array('href', 'title','name','style','id','class','shape','coords','alt','target'),
	'b'        => array('style','id','class'),
	'br'        => array('style','id','class'),
	'big'        => array('style','id','class'),
	'blockquote'    => array('title','style','id','class'),
	'caption'    => array('style','id','class'),
	'code'        => array('style','id','class'),
	'del'        => array('title','style','id','class'),
	'div'        => array('title','style','id','class','align'),
	'dt'        => array('style','id','class'),
	'dd'        => array('style','id','class'),
	'font'        => array('color','size','face','style','id','class'),
	'h1'        => array('style','id','class','align'),
	'h2'        => array('style','id','class','align'),
	'h3'        => array('style','id','class','align'),
	'h4'        => array('style','id','class','align'),
	'h5'        => array('style','id','class','align'),
	'h6'        => array('style','id','class','align'),
	'hr'        => array('style','id','class'),
	'i'        => array('style','id','class'),
	'img'        => array('src','alt','height','width','title'),
	'ins'        => array('title','style','id','class'),
	'li'        => array('style','id','class'),
	'map'        => array('shape','coords','href','alt','title','style','id','class','name'),
	'ol'        => array('style','id','class'),
	'p'        => array('style','id','class','align'),
	'pre'        => array('style','id','class'),
	's'        => array('style','id','class'),
	'small'        => array('style','id','class'),
	'strong'    => array('style','id','class'),
	'span'        => array('title','style','id','class','align'),
	'sub'        => array('style','id','class'),
	'sup'        => array('style','id','class'),
	'table'        => array('border','width','style','id','class','cellspacing','cellpadding'),
	'tbody'        => array('align','valign','style','id','class'),
	'td'        => array('width','height','style','id','class','align','valign','colspan','rowspan'),
	'tfoot'        => array('align','valign','style','id','class','align','valign'),
	'th'        => array('width','height','style','id','class','colspan','rowspan'),
	'thead'        => array('align','valign','style','id','class'),
	'tr'        => array('align','valign','style','id','class'),
	'u'        => array('style','id','class'),
	'ul'        => array('style','id','class')
);

Воспользоваться санитайзером с одним из преднастроенных уровней можно так:

$Sanitizer = new CBXSanitizer;

$Sanitizer->SetLevel(CBXSanitizer::SECURE_LEVEL_MIDDLE);

$pureHtml = $Sanitizer->SanitizeHtml($html);

Для работы с санитайзером доступны функции класса CBXSanitizer.


31
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии