%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/security/classes/general/tests/ |
Current File : /home/bitrix/www/bitrix/modules/security/classes/general/tests/php_configuration.php |
<? /** * Bitrix Framework * @package bitrix * @subpackage security * @copyright 2001-2013 Bitrix */ /** * Class CSecurityPhpConfigurationTest * @since 12.5.0 */ class CSecurityPhpConfigurationTest extends CSecurityBaseTest { protected $internalName = "PhpConfigurationTest"; protected $tests = array( "phpEntropy" => array( "method" => "checkPhpEntropy" ), "phpInclude" => array( "method" => "isPhpConfVarOff", "params" => array("allow_url_include"), "base_message_key" => "SECURITY_SITE_CHECKER_PHP_INCLUDE", "critical" => CSecurityCriticalLevel::HIGHT ), "phpFopen" => array( "method" => "isPhpConfVarOff", "params" => array("allow_url_fopen"), "base_message_key" => "SECURITY_SITE_CHECKER_PHP_FOPEN", "critical" => CSecurityCriticalLevel::MIDDLE ), "aspTags" => array( "method" => "isPhpConfVarOff", "params" => array("asp_tags"), "base_message_key" => "SECURITY_SITE_CHECKER_PHP_ASP", "critical" => CSecurityCriticalLevel::HIGHT ), "httpOnly" => array( "method" => "isPhpConfVarOn", "params" => array("session.cookie_httponly"), "base_message_key" => "SECURITY_SITE_CHECKER_PHP_HTTPONLY", "critical" => CSecurityCriticalLevel::MIDDLE ), "cookieOnly" => array( "method" => "isPhpConfVarOn", "params" => array("session.use_only_cookies"), "base_message_key" => "SECURITY_SITE_CHECKER_PHP_COOKIEONLY", "critical" => CSecurityCriticalLevel::HIGHT ), "mbstringSubstitute" => array( "method" => "checkMbstringSubstitute", "params" => array(), "base_message_key" => "SECURITY_SITE_CHECKER_PHP_MBSTRING_SUBSTITUTE", "critical" => CSecurityCriticalLevel::HIGHT ), // ToDo: need compatibility with PHP < 5.4.0? "zendMultibyte" => array( "method" => "isPhpConfVarOff", "params" => array("zend.multibyte"), "base_message_key" => "SECURITY_SITE_CHECKER_ZEND_MULTIBYTE_ENABLED", "critical" => CSecurityCriticalLevel::HIGHT ), "displayErrors" => array( "method" => "isPhpConfVarOff", "params" => array("display_errors"), "base_message_key" => "SECURITY_SITE_CHECKER_DISPLAY_ERRORS", "critical" => CSecurityCriticalLevel::LOW ), "requestOrder" => array( "method" => "checkRequestOrder" ), "mailAddHeader" => array( "method" => "isPhpConfVarOff", "params" => array("mail.add_x_header"), "base_message_key" => "SECURITY_SITE_CHECKER_MAIL_ADD_HEADER", "critical" => CSecurityCriticalLevel::LOW ), ); public function __construct() { IncludeModuleLangFile(__FILE__); } /** * Check php session entropy * @return bool */ protected function checkPhpEntropy() { if(self::isRunOnWin() && version_compare(phpversion(),"5.3.3","<")) { $this->addUnformattedDetailError("SECURITY_SITE_CHECKER_LOW_PHP_VERSION_ENTROPY", CSecurityCriticalLevel::MIDDLE); return self::STATUS_FAILED; } elseif(!self::checkPhpEntropyConfigs()) { $this->addUnformattedDetailError("SECURITY_SITE_CHECKER_PHP_ENTROPY", CSecurityCriticalLevel::MIDDLE); return self::STATUS_FAILED; } return self::STATUS_PASSED; } /** * @return bool */ protected function checkPhpEntropyConfigs() { $entropyFile = ini_get("session.entropy_file"); $entropyLength = ini_get("session.entropy_length"); if(!in_array($entropyFile, array("/dev/random", "/dev/urandom"), true)) { return self::STATUS_FAILED; } if(self::isRunOnWin() && !$entropyLength) { return self::STATUS_FAILED; } elseif ($entropyLength < 128) { return self::STATUS_FAILED; } return self::STATUS_PASSED; } protected function checkRequestOrder() { $order = ini_get('request_order'); if (!$order || !in_array($order, array('GP', 'PG'), true)) { $this->addUnformattedDetailError( 'SECURITY_SITE_CHECKER_PHP_REQUEST_ORDER', CSecurityCriticalLevel::MIDDLE, getMessage('SECURITY_SITE_CHECKER_PHP_REQUEST_ORDER_ADDITIONAL', array( '#CURRENT#' => $order, '#RECOMMENDED#' => 'GP' )) ); return self::STATUS_FAILED; } return self::STATUS_PASSED; } /** * @return bool */ protected function checkMbstringSubstitute() { if (extension_loaded('mbstring') && $this->isPhpConfVarEquals('mbstring.substitute_character', 'none')) return self::STATUS_FAILED; return self::STATUS_PASSED; } /** * @param string $name * @return bool */ protected function isPhpConfVarOff($name) { return (intval(ini_get($name)) == 0 || strtolower(trim(ini_get($name))) == "off"); } /** * @param string $name * @return bool * @since 14.0.0 */ protected function isPhpConfVarOn($name) { return (intval(ini_get($name)) == 1 || strtolower(trim(ini_get($name))) == "on"); } /** * @param string $name * @param int|string $value * @return bool */ protected function isPhpConfVarEquals($name, $value) { return ini_get($name) == $value; } /** * @param string $name * @param int|string $value * @return bool */ protected function isPhpConfVarNotEquals($name, $value) { return ini_get($name) != $value; } }