Exemple #1
0
 /**
  * Исключает 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;
 }