/** * Inicializar la aplicación. * Esta función inicializa las variables de la aplicación y muestra la página * según el estado en el que se encuentre. */ public static function start() { self::setIncludes(); if (version_compare(PHP_VERSION, '5.1.2', '>=')) { // Registro del cargador de clases (PHP >= 5.1.2) if (version_compare(PHP_VERSION, '5.3.0', '>=')) { spl_autoload_register('SP\\Init::loadClass', true); } else { spl_autoload_register(array('SP\\Init', 'loadClass')); } } else { /** * Fall back to traditional autoload for old PHP versions * * @param string $classname The name of the class to load */ function __autoload($classname) { \SP\Init::loadClass($classname); } } error_reporting(E_ALL | E_STRICT); if (defined('DEBUG') && DEBUG) { ini_set('display_errors', 1); } date_default_timezone_set('UTC'); // Intentar desactivar magic quotes. if (get_magic_quotes_gpc() == 1) { ini_set('magic_quotes_runtime', 0); } // Copiar la cabecera http de autentificación para apache+php-fcgid if (isset($_SERVER['HTTP_XAUTHORIZATION']) && !isset($_SERVER['HTTP_AUTHORIZATION'])) { $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['HTTP_XAUTHORIZATION']; } // Establecer las cabeceras de autentificación para apache+php-cgi if (isset($_SERVER['HTTP_AUTHORIZATION']) && preg_match('/Basic\\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) { list($name, $password) = explode(':', base64_decode($matches[1]), 2); $_SERVER['PHP_AUTH_USER'] = strip_tags($name); $_SERVER['PHP_AUTH_PW'] = strip_tags($password); } // Establecer las cabeceras de autentificación para que apache+php-cgi funcione si la variable es renombrada por apache if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']) && preg_match('/Basic\\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)) { list($name, $password) = explode(':', base64_decode($matches[1]), 2); $_SERVER['PHP_AUTH_USER'] = strip_tags($name); $_SERVER['PHP_AUTH_PW'] = strip_tags($password); } // Establecer el modo debug si una sesión de xdebug está activa if (isset($_COOKIE['XDEBUG_SESSION']) && !defined('DEBUG')) { define('DEBUG', true); } // Establecer el nivel de logging if (defined('DEBUG') && DEBUG) { // error_log('sysPass DEBUG'); error_reporting(E_ALL); ini_set('display_errors', 'On'); } else { error_reporting(E_ALL & ~(E_DEPRECATED | E_STRICT | E_NOTICE)); ini_set('display_errors', 'Off'); } // Cargar las extensiones self::loadExtensions(); // Iniciar la sesión de PHP self::startSession(); // Establecer las rutas de la aplicación self::setPaths(); // Cargar el lenguaje Language::setLanguage(); // Establecer el tema de sysPass Themes::setTheme(); // Comprobar si es necesario cambiar a HTTPS self::checkHttps(); // Comprobar si es necesario inicialización if (self::checkInitSourceInclude()) { return; } // Comprobar la configuración self::checkConfig(); // Comprobar si está instalado self::checkInstalled(); // Comprobar si el modo mantenimiento está activado self::checkMaintenanceMode(); // Comprobar si la Base de datos existe if (!DB::checkDatabaseExist()) { self::initError(_('Error en la verificación de la base de datos')); } // Comprobar si es cierre de sesión self::checkLogout(); // Comprobar la versión y actualizarla self::checkVersion(); // Inicializar la sesión self::initSession(); // Comprobar acciones en URL self::checkPreLoginActions(); // Intentar establecer el tiempo de vida de la sesión en PHP $sessionLifeTime = self::getSessionLifeTime(); @ini_set('gc_maxlifetime', (string) $sessionLifeTime); if (!Config::getValue("installed", false)) { Session::setUserId(''); } if (isset($_SERVER['PHP_AUTH_USER']) && Session::getUserId() && $_SERVER['PHP_AUTH_USER'] != Session::getUserId()) { self::logout(); } // Manejar la redirección para usuarios logeados if (Request::analyze('redirect_url', '', true) && self::isLoggedIn()) { $location = 'index.php'; // Denegar la regirección si la URL contiene una @ // Esto previene redirecciones como ?redirect_url=:user@domain.com if (strpos($location, '@') === false) { header('Location: ' . $location); return; } } // Volver a cargar la configuración si se recarga la página if (Request::checkReload()) { Config::readConfig(); // Restablecer el idioma y el tema visual Language::setLanguage(); Themes::setTheme(); } if (self::isLoggedIn() || Request::analyze('isAjax', false, true)) { return; } // El usuario no está logado y no es una petición, redirigir al login self::goLogin(); }
/** * Inicializar la aplicación. * Esta función inicializa las variables de la aplicación y muestra la página * según el estado en el que se encuentre. */ public static function start() { self::setIncludes(); if (version_compare(PHP_VERSION, '5.1.2', '>=')) { // Registro del cargador de clases (PHP >= 5.1.2) if (version_compare(PHP_VERSION, '5.3.0', '>=')) { spl_autoload_register('SP\\Init::loadClass', true); } else { spl_autoload_register(array('SP\\Init', 'loadClass')); } } else { /** * Fall back to traditional autoload for old PHP versions * * @param string $classname The name of the class to load */ function __autoload($classname) { \SP\Init::loadClass($classname); } } date_default_timezone_set('UTC'); // Intentar desactivar magic quotes. if (get_magic_quotes_gpc() == 1) { ini_set('magic_quotes_runtime', 0); } // Variables de autentificación self::setAuth(); // Establecer el nivel de logging self::setLogging(); // Cargar las extensiones self::loadExtensions(); // Iniciar la sesión de PHP self::startSession(); // Establecer las rutas de la aplicación self::setPaths(); // Cargar el lenguaje Language::setLanguage(); // Establecer el tema de sysPass Themes::setTheme(); // Comprobar si es necesario cambiar a HTTPS self::checkHttps(); // Comprobar si es necesario inicialización if (self::checkInitSourceInclude()) { return; } // Comprobar la configuración self::checkConfig(); // Comprobar si está instalado self::checkInstalled(); // Comprobar si el modo mantenimiento está activado self::checkMaintenanceMode(); // Comprobar si la Base de datos existe if (!DB::checkDatabaseExist()) { self::initError(_('Error en la verificación de la base de datos')); } // Comprobar si es cierre de sesión self::checkLogout(); // Comprobar la versión y actualizarla self::checkVersion(); // Inicializar la sesión self::initSession(); // Comprobar acciones en URL self::checkPreLoginActions(); // Intentar establecer el tiempo de vida de la sesión en PHP @ini_set('gc_maxlifetime', (string) self::getSessionLifeTime()); if (!Config::getValue("installed", false)) { Session::setUserId(''); } // Comprobar si se ha identificado mediante el servidor web y el usuario coincide if (self::isLoggedIn() && !Auth::checkServerAuthUser(Session::getUserLogin())) { self::logout(); } // Manejar la redirección para usuarios logeados if (Request::analyze('redirect_url', '', true) && self::isLoggedIn()) { $location = 'index.php'; // Denegar la redirección si la URL contiene una @ // Esto previene redirecciones como ?redirect_url=:user@domain.com if (strpos($location, '@') === false) { header('Location: ' . $location); return; } } // Volver a cargar la configuración si se recarga la página if (Request::checkReload()) { Config::readConfig(); // Restablecer el idioma y el tema visual Language::setLanguage(); Themes::setTheme(); } if (self::isLoggedIn() || Request::analyze('isAjax', false, true)) { return; } // El usuario no está logado y no es una petición, redirigir al login self::goLogin(); }