/** * Проверка сессии в АЦ * @param string $module имя модуля * @param bool $onlylink только получение ссылки?(тобишь без переадресаций) * @param bool $hardmode для АЦ, к примеру. Проверяет SID, даже если отсутствует * @return bool в АЦ? */ public function check_inadmin($module, $onlylink = false, $hardmode = false) { $baseurl = globals::g('baseurl'); if ($hardmode) { $onlylink = false; } elseif (!$this->perms['can_acp'] || !$_REQUEST['sid'] && !$onlylink) { return false; } $sid = get_formkey(null, "sid"); if ($_SESSION['sid'] != $sid) { $_SESSION['sid'] = ''; } if (!$_REQUEST['sid'] && $_SESSION['sid']) { // Дабы не входить снова, если SID отсутствует $sid = $_SESSION['sid']; } // Но переадресация нужна $afile = $baseurl . "admincp.php?sid="; $eadmin_file = $afile . $sid; globals::s('eadmin_file', $eadmin_file); if (!$onlylink) { try { check_formkey("sid"); } catch (EngineException $e) { if ($hardmode && (!$_SESSION['sid'] || $_REQUEST['sid'])) { $this->acp_login($afile); } furl::o()->location($eadmin_file); } } $this->acp_modules(); if ($module && $this->perms['can_acp'] == 1) { if (!in_array($module, (array) $this->perms['acp_modules'])) { if (!$onlylink) { furl::o()->location($eadmin_file); } else { return false; } } } tpl::o()->assign("admin_sid", 'sid=' . $sid); tpl::o()->assign("eadmin_file", $eadmin_file); return true; }
/** * Проверка ключа формы для защиты от CSRF * @param string $var имя ключа * @return bool true, если ключ верен * @throws EngineException */ function check_formkey($var = "fk") { if (users::o()->check_adminmode()) { return true; } if (!$var) { $var = "fk"; } $ret = get_formkey(null, $var) == $_REQUEST[$var]; if (!$ret) { throw new EngineException("bad_check_key"); } return $ret; }