%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/security/classes/general/tests/ |
Current File : /home/bitrix/www/bitrix/modules/security/classes/general/tests/taint_checking.php |
<? /** * Bitrix Framework * @package bitrix * @subpackage security * @copyright 2001-2013 Bitrix */ /** * Class CSecurityTaintCheckingTest * @since 12.5.0 */ class CSecurityTaintCheckingTest extends CSecurityBaseTest { const REQUEST_TIMEOUT = 3; protected $internalName = "TaintCheckingTest"; public function __construct() { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/vuln_scanner.php"); IncludeModuleLangFile(__FILE__); } /** * Check test requirements (e.g. max_execution_time) * * @param array $params * @throws CSecurityRequirementsException * @return bool */ public function checkRequirements($params = array()) { if(extension_loaded('tokenizer') !== true) throw new CSecurityRequirementsException(GetMessage("SECURITY_SITE_CHECKER_TAINT_TOKENIZER_NOT_FOUND")); $maxExecutionTime = ini_get("max_execution_time"); if($maxExecutionTime > 0 && $maxExecutionTime <= 20) throw new CSecurityRequirementsException(GetMessage("SECURITY_SITE_CHECKER_TAINT_EXECUTION_TIME")); $memoryLimit = CUtil::Unformat(ini_get("memory_limit")); if($memoryLimit > 0 && $memoryLimit <= 250 * 1024 * 1024) throw new CSecurityRequirementsException(GetMessage("SECURITY_SITE_CHECKER_TAINT_MEMORY_LIMIT")); return true; } /** * Run test and return results * @param array $params * @return array */ public function check(array $params = array()) { $dirtyResults = CQAACheckListTests::checkVulnerabilities($params); $result = $this->formatResults($dirtyResults); return $result; } /** * @param array $pResults * @return array */ protected function formatResults($pResults) { $result = array(); $result["name"] = $this->getName(); if(isset($pResults["STATUS"])) { $result["status"] = $pResults["STATUS"]; } if(isset($pResults["IN_PROGRESS"])) { $result["in_progress"] = $pResults["IN_PROGRESS"]; $result["timeout"] = self::REQUEST_TIMEOUT; } elseif(!$result["status"]) { $result["problem_count"] = 1; } if(isset($pResults["MESSAGE"])) { $result["errors"] = self::formatErrors($pResults["MESSAGE"]); } else { $result["errors"] = array(); } return $result; } /** * @param array $pErrors * @return array */ protected static function formatErrors($pErrors) { $result = array(); if(isset($pErrors["PROBLEM_COUNT"]) && intval($pErrors["PROBLEM_COUNT"]) > 0) { $problemCount = $pErrors["PROBLEM_COUNT"]; } else { $problemCount = 0; } $result["title"] = GetMessage("SECURITY_SITE_CHECKER_TAINT_TITLE", array("#COUNT#" => $problemCount)); $result["critical"] = CSecurityCriticalLevel::HIGHT; $result["recommendation"] = GetMessage("SECURITY_SITE_CHECKER_TAINT_RECOMMENDATION"); $result["detail"] = self::formatDetail($pErrors["DETAIL"]); return array($result); } /** * @deprecated * @param string $pDetail * @return string */ protected static function formatDetail($pDetail) { $detail = preg_replace("# (<span\sclass=\"checklist-vulnscan-filename\">[^<]+</span>\s*) (<div\sid=\"[^\"]+\">\s*<div\sclass=\"checklist-vulnscan-vulnblock\">\s*) (<div\sclass=\"checklist-vulnscan-vulnscan-blocktitle\">[^<]+</div>) #xis", "\\3\\2\\1", $pDetail); return $detail; } }