%PDF- %PDF-
| Direktori : /var/www/projetos/suporte.iigd.com.br/src/System/Requirement/ |
| Current File : /var/www/projetos/suporte.iigd.com.br/src/System/Requirement/SafeDocumentRoot.php |
<?php
/**
* ---------------------------------------------------------------------
*
* GLPI - Gestionnaire Libre de Parc Informatique
*
* http://glpi-project.org
*
* @copyright 2015-2024 Teclib' and contributors.
* @copyright 2003-2014 by the INDEPNET Development Team.
* @licence https://www.gnu.org/licenses/gpl-3.0.html
*
* ---------------------------------------------------------------------
*
* LICENSE
*
* This file is part of GLPI.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* ---------------------------------------------------------------------
*/
namespace Glpi\System\Requirement;
/**
* @since 10.0.7
*/
final class SafeDocumentRoot extends AbstractRequirement
{
public function __construct()
{
parent::__construct(
__('Safe configuration of web root directory'),
sprintf(
__('Web server root directory should be `%s` to ensure non-public files cannot be accessed.'),
realpath(GLPI_ROOT) . DIRECTORY_SEPARATOR . 'public'
),
true,
true,
isCommandLine() // out of context when tested from CLI
);
}
protected function check()
{
if (isCommandLine()) {
$this->validated = false;
$this->validation_messages[] = __('Checking web server root directory configuration cannot be done on CLI context.');
return;
}
$included_files = get_included_files();
$initial_script = array_shift($included_files);
// If `auto_prepend_file` configuration is used, ignore first included files
// as long as they are not located inside GLPI directory tree.
$prepended_file = ini_get('auto_prepend_file');
if ($prepended_file !== '' && $prepended_file !== 'none') {
while (
$initial_script !== null
&& !str_starts_with(
realpath($initial_script) ?: '',
realpath(GLPI_ROOT)
)
) {
$initial_script = array_shift($included_files);
}
}
if ($initial_script !== null && realpath($initial_script) === realpath(sprintf('%s/public/index.php', GLPI_ROOT))) {
// Configuration is safe if install/update script is accessed through `public/index.php` router script.
$this->validated = true;
$this->validation_messages[] = __('Web server root directory configuration seems safe.');
} else {
$this->validated = false;
$this->validation_messages[] = __('Web server root directory configuration is not safe as it permits access to non-public files. See installation documentation for more details.');
}
}
}