• Модуль: 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;
	}