/** * @param string $string * @return string */ protected function filter($string) { $stringLen = CUtil::BinStrlen($string) * 2; CUtil::AdjustPcreBacktrackLimit($stringLen); return preg_replace_callback("/(<script[^>]*>)(.*?)(<\\/script[^>]*>)/is", array($this, "getFilteredScript"), $string); }
function Analyze(&$content) { static $arLocalCache = array(); $content_len = CUtil::BinStrlen($content) * 2; CUtil::AdjustPcreBacktrackLimit($content_len); $this->stylewithiframe = preg_match("/<style.*>\\s*iframe/", $content); $arData = preg_split("/(<script.*?>.*?<\\/script.*?>|<iframe.*?>.*?<\\/iframe.*?>)/is", $content, -1, PREG_SPLIT_DELIM_CAPTURE); $cData = count($arData); if ($cData < 2) { return; } $bDataChanged = false; for ($iData = 1; $iData < $cData; $iData += 2) { $this->data = $arData[$iData]; //полный код блока, включая ограничивающие теги // < 1 2 > 3 4 if (!preg_match('/^<(script|iframe)(.*?)>(.*?)(<\\/\\1.*?>)$/is', $this->data, $ret)) { continue; } if ($iData > 1) { $this->prev = $arData[$iData - 2] . $arData[$iData - 1]; } else { $this->prev = $arData[$iData - 1]; } if ($iData < $cData - 2) { $this->next = $arData[$iData + 1] . $arData[$iData + 2]; } else { $this->next = $arData[$iData + 1]; } $this->resultrules = array(); $this->bodylines = false; $this->atributes = $ret[2]; if (strtolower($ret[1]) == 'script') { $this->body = $this->returnscriptbody($this->data); $this->type = 'script'; } else { $this->body = ''; $this->type = 'iframe'; } $this->whitelist_id = $this->isinwhitelist(); if (!$this->whitelist_id) { $cache_id = md5($this->data); if (!isset($arLocalCache[$cache_id])) { $arLocalCache[$cache_id] = $this->returnblockrating(); } if ($arLocalCache[$cache_id] >= $this->maxrating) { $this->dolog(); $arData[$iData] = $this->end_blkblock(); if ($this->replace) { $bDataChanged = true; } } } $this->cnt++; } if ($bDataChanged) { $content = implode('', $arData); } }
/** * @param $pString * @return bool */ protected static function AdjustPcreBacktrackLimit($pString) { if (!is_string($pString)) { return false; } $strlen = CUtil::BinStrlen($pString) * 2; CUtil::AdjustPcreBacktrackLimit($strlen); return true; }