- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/sanitizer.php
- Класс: CBXSanitizer
- Вызов: CBXSanitizer::IsValidAttr
protected function IsValidAttr(&$arAttr)
{
if (!isset($arAttr[1]) || !isset($arAttr[3]))
{
return false;
}
$attr = mb_strtolower($arAttr[1]);
$attrValue = $this->Decode($arAttr[3]);
switch ($attr)
{
case 'src':
case 'href':
case 'data-url':
if(!preg_match("#^(http://|https://|ftp://|file://|mailto:|callto:|skype:|tel:|sms:|\#|/)#i".BX_UTF_PCRE_MODIFIER, $attrValue))
{
$arAttr[3] = 'http://' . $arAttr[3];
}
$valid = (!preg_match("#javascript:|data:|[^\w".$this->localAlph."a-zA-Z:/\.=@;,!~\*\&\#\)(%\s\+$\?\-\[\]]#i".BX_UTF_PCRE_MODIFIER, $attrValue))
? true : false;
break;
case 'height':
case 'width':
case 'cellpadding':
case 'cellspacing':
$valid = !preg_match("#^[^0-9\-]+(px|%|\*)*#i".BX_UTF_PCRE_MODIFIER, $attrValue)
? true : false;
break;
case 'title':
case 'alt':
$valid = !preg_match("#[^\w".$this->localAlph."\.\?!,:;\s\-]#i".BX_UTF_PCRE_MODIFIER, $attrValue)
? true : false;
break;
case 'style':
$attrValue = str_replace('"', '', $attrValue);
$valid = !preg_match("#(behavior|expression|javascript)#i".BX_UTF_PCRE_MODIFIER, $attrValue) && !preg_match("#[^\/\w\s)(!%,:\.;\-\#\']#i".BX_UTF_PCRE_MODIFIER, $attrValue)
? true : false;
break;
case 'coords':
$valid = !preg_match("#[^0-9\s,\-]#i".BX_UTF_PCRE_MODIFIER, $attrValue)
? true : false;
break;
default:
if (array_key_exists($attr, $this->additionalAttrs))
{
$valid = true === call_user_func_array(
$this->additionalAttrs[$attr]['content'],
array($attrValue)
);
}
else
{
$valid = !preg_match("#[^\s\w" . $this->localAlph . "\-\#\./;]#i" . BX_UTF_PCRE_MODIFIER, $attrValue)
? true : false;
}
break;
}
return $valid;
}