/** * Bitrix Framework * @package bitrix * @subpackage main * @copyright 2001-2013 Bitrix */ /** * Bitrix vars * * @global CMain $APPLICATION * @global CUser $USER */ @ini_set("track_errors", "1"); @ini_set('display_errors', 1); error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED); $message = null; define('DEBUG_FLAG', str_replace('\\','/',$_SERVER['DOCUMENT_ROOT'] . '/bitrix/site_checker_debug')); require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/classes/general/site_checker.php'); // NO AUTH TESTS if (isset($_REQUEST['unique_id']) && $_REQUEST['unique_id']) { if (!file_exists(DEBUG_FLAG) && $_REQUEST['unique_id'] != checker_get_unique_id()) die('Permission denied: UNIQUE ID ERROR'); $testType = $_GET['test_type'] ?? ''; switch ($testType) { case 'socket_test': echo "SUCCESS"; break; case 'webdav_test': if ($_SERVER['REQUEST_METHOD'] == $_GET['method']) echo "SUCCESS"; else echo 'Incorrect $_SERVER[REQUEST_METHOD]: '.$_SERVER['REQUEST_METHOD'].', expected: '.preg_replace('#[^A-Z]#', '', $_GET['method']); break; case 'compression': echo str_repeat('SUCCESS', 8*1024); break; case 'perf': define("NOT_CHECK_PERMISSIONS", true); define("LDAP_NO_PORT_REDIRECTION", true); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); foreach(GetModuleEvents("main", "OnEpilog", true) as $arEvent) ExecuteModuleEventEx($arEvent); $APPLICATION->EndBufferContentMan(); echo round(microtime(true) - START_EXEC_TIME, 4); break; case 'fast_download': header('X-Accel-Redirect: /bitrix/tmp/success.txt'); break; case 'dbconn_test': ob_start(); define('NOT_CHECK_PERMISSIONS', true); require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php'); $buff = ''; while(ob_get_level()) { $buff .= ob_get_contents(); ob_end_clean(); } ob_end_clean(); if (function_exists('mb_internal_encoding')) mb_internal_encoding('ISO-8859-1'); echo $buff === '' ? 'SUCCESS' : 'Length: '.mb_strlen($buff).' ('.$buff . ')'; break; case 'pcre_recursion_test': $a = str_repeat('a',4096); if (preg_match('/(a)+/',$a)) // Segmentation fault (core dumped) echo 'SUCCESS'; else echo 'CLEAN'; break; case 'method_exists': $arRes= Array ( "CLASS" => "", "CALC_METHOD" => "" ); method_exists($arRes['CLASS'], $arRes['CALC_METHOD']); echo 'SUCCESS'; break; case 'upload_test': if (function_exists('mb_internal_encoding')) mb_internal_encoding('ISO-8859-1'); $dir = $_SERVER['DOCUMENT_ROOT'].'/bitrix/tmp'; if (!file_exists($dir)) mkdir($dir); $binaryData = ''; for($i=40;$i<240;$i++) $binaryData .= chr($i); if (isset($_REQUEST['big']) && $_REQUEST['big']) $binaryData = str_repeat($binaryData, 21000); if (isset($_REQUEST['raw']) && $_REQUEST['raw']) $binaryData_received = file_get_contents('php://input'); elseif (move_uploaded_file($tmp_name = $_FILES['test_file']['tmp_name'], $image = $dir.'/site_checker.bin')) { $binaryData_received = file_get_contents($image); unlink($image); } else { echo 'move_uploaded_file('.$tmp_name.','.$image.')=false'."\n"; echo '$_FILES='."\n"; print_r($_FILES); die(); } if ($binaryData === $binaryData_received) echo "SUCCESS"; else echo 'strlen($binaryData)='.mb_strlen($binaryData).', strlen($binaryData_received)='.mb_strlen($binaryData_received); break; case 'post_test': $ok = true; for ($i=0;$i<201;$i++) $ok = $ok && ($_POST['i'.$i] == md5($i)); echo $ok ? 'SUCCESS' : 'FAIL'; break; case 'memory_test': @ini_set("memory_limit", "512M"); $max = intval($_GET['max']); if ($max) { for($i=1;$i<=$max;$i++) $a[] = str_repeat(chr($i),1024*1024); // 1 Mb echo "SUCCESS"; } break; case 'auth_test': $remote_user = ($_SERVER["REMOTE_USER"] ?? '') ?: ($_SERVER["REDIRECT_REMOTE_USER"] ?? ''); $strTmp = base64_decode(mb_substr($remote_user, 6)); if ($strTmp) list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', $strTmp); if ($_SERVER['PHP_AUTH_USER']=='test_user' && $_SERVER['PHP_AUTH_PW']=='test_password') echo('SUCCESS'); break; case 'session_test': session_start(); echo $_SESSION['CHECKER_CHECK_SESSION'] ?? ''; $_SESSION['CHECKER_CHECK_SESSION'] = 'SUCCESS'; break; case 'redirect_test': foreach(array('SERVER_PORT','HTTPS','FCGI_ROLE','SERVER_PROTOCOL','SERVER_PORT','HTTP_HOST') as $key) $GLOBALS['_SERVER'][$key] = $GLOBALS['_REQUEST'][$key]; function IsHTTPS() { return ($_SERVER["SERVER_PORT"]==443 || mb_strtolower($_SERVER["HTTPS"]) == "on"); } function SetStatus($status) { $bCgi = (mb_stristr(php_sapi_name(), "cgi") !== false); $bFastCgi = ($bCgi && (array_key_exists('FCGI_ROLE', $_SERVER) || array_key_exists('FCGI_ROLE', $_ENV))); if($bCgi && !$bFastCgi) header("Status: ".$status); else header($_SERVER["SERVER_PROTOCOL"]." ".$status); } if (isset($_REQUEST['done'])) echo 'SUCCESS'; else { SetStatus("302 Found"); $protocol = (IsHTTPS() ? "https" : "http"); $host = $_SERVER['HTTP_HOST']; if($_SERVER['SERVER_PORT'] <> 80 && $_SERVER['SERVER_PORT'] <> 443 && $_SERVER['SERVER_PORT'] > 0 && strpos($_SERVER['HTTP_HOST'], ":") === false) $host .= ":".$_SERVER['SERVER_PORT']; $url = "?redirect_test=Y&done=Y&unique_id=".checker_get_unique_id(); header("Request-URI: ".$protocol."://".$host.$url); header("Content-Location: ".$protocol."://".$host.$url); header("Location: ".$protocol."://".$host.$url); exit; } break; default: break; } if (isset($_GET['fix_mode']) && ($fix_mode = intval($_GET['fix_mode']))) { if (isset($_REQUEST['charset']) && $_REQUEST['charset']) { define('LANG_CHARSET', preg_replace('#[^a-z0-9\-]#i', '', $_REQUEST['charset'])); header('Content-type: text/plain; charset='.LANG_CHARSET); } define('LANGUAGE_ID', preg_match('#[a-z]{2}#',$_REQUEST['lang'] ?? '',$regs) ? $regs[0] : 'en'); if (file_exists($file = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/lang/'.LANGUAGE_ID.'/admin/site_checker.php')) include_once($file); else include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/lang/en/admin/site_checker.php'); InitPureDB(); $oTest = new CSiteCheckerTest($_REQUEST['step'] ?? 0, 0, $fix_mode); if (file_exists(DEBUG_FLAG)) $oTest->timeout = 30; if ($_REQUEST['global_test_vars'] && ($d = base64_decode($_REQUEST['global_test_vars']))) $oTest->arTestVars = unserialize($d, ['allowed_classes' => false]); else $oTest->arTestVars = array(); $oTest->Start(); if ($oTest->percent < 100) { $strNextRequest = '&step='.$oTest->step.'&global_test_vars='.base64_encode(serialize($oTest->arTestVars)); $strFinalStatus = ''; } else { $strNextRequest = ''; $strFinalStatus = '100%'; } // fix mode echo ' iPercent = '.$oTest->percent.'; test_percent = '.$oTest->test_percent.'; strCurrentTestFunc = "'.$oTest->last_function.'"; strCurrentTestName = "'.CUtil::JSEscape($oTest->strCurrentTestName).'"; strNextTestName = "'.CUtil::JSEscape($oTest->strNextTestName).'"; strNextRequest = "'.CUtil::JSEscape($strNextRequest).'"; strResult = "'.CUtil::JSEscape(str_replace(array("\r","\n"),"",$oTest->strResult)).'"; strFinalStatus = "'.CUtil::JSEscape($strFinalStatus).'"; test_result = '.($oTest->result === true ? 1 : ($oTest->result === false ? -1 : 0)).'; // 0 = note '; } die(); } // END NO AUTH TESTS if (file_exists(DEBUG_FLAG)) { define('NOT_CHECK_PERMISSIONS', true); } if(isset($_REQUEST['test_start']) && $_REQUEST['test_start']) { define("NO_KEEP_STATISTIC", true); define("NO_AGENT_CHECK", true); } require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); IncludeModuleLangFile(__FILE__); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/prolog.php"); define("HELP_FILE", "utilities/site_checker.php"); //error_reporting(E_ALL &~E_NOTICE); define("SUPPORT_PAGE", (LANGUAGE_ID == 'ru' ? 'https://www.1c-bitrix.ru/support/' : 'https://www.bitrixsoft.com/support/')); if ($USER->CanDoOperation('view_other_settings')) { if (file_exists(DEBUG_FLAG)) if (!unlink(DEBUG_FLAG)) CAdminMessage::ShowMessage(Array("TYPE"=>"ERROR", "MESSAGE"=>'Can\'t delete ' . DEBUG_FLAG)); } elseif(!defined('NOT_CHECK_PERMISSIONS') || NOT_CHECK_PERMISSIONS !== true) $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); if (isset($_POST['access_check']) && $_POST['access_check']) { if (defined('NOT_CHECK_PERMISSIONS') && NOT_CHECK_PERMISSIONS ===true || check_bitrix_sessid()) { $ob = new CSearchFiles; $ob->TimeLimit = 10; if (isset($_REQUEST['break_point']) && $_REQUEST['break_point']) { $ob->SkipPath = $_REQUEST['break_point']; } $check_type = $_REQUEST['check_type'] ?? ''; $sNextPath = ''; if ($check_type == 'upload') { if (!file_exists($tmp = $_SERVER['DOCUMENT_ROOT'].BX_PERSONAL_ROOT.'/tmp')) mkdir($tmp); $upload = $_SERVER['DOCUMENT_ROOT'].'/'.COption::GetOptionString('main', 'upload_dir', 'upload'); if (0 === mb_strpos($_REQUEST['break_point'] ?? '', $upload)) $path = $upload; else { $path = $tmp; $sNextPath = $upload; } } elseif($check_type == 'kernel') $path = $_SERVER['DOCUMENT_ROOT'].'/bitrix'; elseif($check_type == 'personal') $path = $_SERVER['DOCUMENT_ROOT'].BX_PERSONAL_ROOT; else { $path = $_SERVER['DOCUMENT_ROOT']; $check_type = 'full'; } if ($ob->Search($path)) { if ($ob->BreakPoint || $sNextPath) { if ($ob->BreakPoint) $sNextPath = $ob->BreakPoint; $cnt_total = intval($_REQUEST['cnt_total'] ?? 0) + $ob->FilesCount; ?>