• Модуль: security
  • Путь к файлу: ~/bitrix/modules/security/classes/general/tests/environment.php
  • Класс: CSecurityEnvironmentTest
  • Вызов: CSecurityEnvironmentTest::checkCollectivePhpSession
protected function checkCollectivePhpSession()
{
	if(self::isRunOnWin())
		return self::STATUS_PASSED;

	if($this->getSessionGeneralHandlerType() !== SessionConfigurationResolver::TYPE_FILE)
		return self::STATUS_PASSED;

	if(ini_get("session.save_handler") != "files")
		return self::STATUS_PASSED;

	$tmpDir = self::getTmpDir("session.save_path");
	if(!$tmpDir)
		return self::STATUS_PASSED;

	$additionalInfo = "";
	$isFailed = false;
	$currentUID = self::getCurrentUID();
	$sessionSign = self::getSessionUniqID();
	foreach (glob($tmpDir."/sess_*", GLOB_NOSORT) as $fileName)
	{

		if($currentUID !== null)
		{
			$fileOwner = fileowner($fileName);
			if($currentUID != $fileOwner)
			{
				$additionalInfo = getMessage("SECURITY_SITE_CHECKER_COLLECTIVE_SESSION_ADDITIONAL_OWNER", array(
					"#FILE#" => $fileName,
					"#FILE_ONWER#" => $fileOwner,
					"#CURRENT_OWNER#" => $currentUID,
				));
				$isFailed = true;
				break;
			}
		}

		if(is_readable($fileName))
		{
			$fileContent = file_get_contents($fileName);
			if (mb_strpos($fileContent, $sessionSign) === false)
			{
				$additionalInfo = getMessage("SECURITY_SITE_CHECKER_COLLECTIVE_SESSION_ADDITIONAL_SIGN", array(
					"#FILE#" => $fileName,
					"#FILE_CONTENT#" => htmlspecialcharsbx(mb_substr($fileContent, 0, 1024)),
					"#SIGN#" => $sessionSign
				));
				$isFailed = true;
				break;
			}
		}
	}

	if($isFailed)
	{
		$this->addUnformattedDetailError(
			"SECURITY_SITE_CHECKER_COLLECTIVE_SESSION",
			CSecurityCriticalLevel::HIGHT,
			$additionalInfo
		);
		return self::STATUS_FAILED;
	}

	return self::STATUS_PASSED;
}