/** * Исключает XSS уязвимости для вех пользовательских данных. * Сохраняет все переданные параметры в реестр queryParams, * в дальнейшем доступный из любой точки программы. * Выявляет часть пути в ссылках, по $_SERVER['SCRIPT_NAME'], * которая не должна учитываться при выборе контролера. * Актуально когда файлы движка лежат не в корне сайта. */ private function __construct() { self::$documentRoot = str_replace(DIRECTORY_SEPARATOR . 'mg-core' . DIRECTORY_SEPARATOR . 'lib', '', dirname(__FILE__)); self::$cutPath = str_replace('/index.php', '', $_SERVER['SCRIPT_NAME']); $route = self::getLastSection(); $route = $route ? $route : 'index'; if (MG::getSetting('catalogIndex') == 'true' && $route == 'index') { $route = 'catalog'; } if ($route == 'mg-admin') { $route = 'mgadmin'; } // Заполняем QUERY_STRING переменной route. $_SERVER['QUERY_STRING'] = 'route=' . $route; $route = str_replace('.html', '', $route); // Конвертируем обращение к контролеру админки в подобающий вид. self::$route = $route; if (get_magic_quotes_gpc()) { $_REQUEST = MG::stripslashesArray($_REQUEST); $_POST = MG::stripslashesArray($_POST); $_GET = MG::stripslashesArray($_GET); } // Если данные пришли не из админки и не из плагинов а от пользователей то проверяим их на XSS. // Также исключение действует на просмотрщик страниц, // он защищен от стороннего использования в контролере, поэтому исключает опасность. if (strpos($route, 'mgadmin') === false && strpos($route, 'ajax') === false && strpos($route, 'previewer') === false || strpos($route, 'ajaxrequest') !== false) { $emulMgOff = false; if (get_magic_quotes_gpc()) { $emulMgOff = true; } $_REQUEST = MG::defenderXss($_REQUEST, $emulMgOff); $_POST = MG::defenderXss($_POST, $emulMgOff); $_GET = MG::defenderXss($_GET, $emulMgOff); } $this->queryParams = $_REQUEST; }