CanDoOperation('view_other_settings')) $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); $isAdmin = $USER->CanDoOperation('edit_other_settings'); @set_time_limit(10000); $serverFileLogName = "/serverfilelog.dat"; $serverFileLogPath = $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules"; $serverFileLog = $serverFileLogPath.$serverFileLogName; $serverFileLogNameError = "/serverfilerr.dat"; $serverFileLogError = $serverFileLogPath.$serverFileLogNameError; $errorMessage = ""; $okMessage = ""; $message = null; $INTEGRITY_VALUE = ""; if (defined("INTEGRITY_VALUE")) $INTEGRITY_VALUE = INTEGRITY_VALUE; if (!function_exists("file_get_contents")) { function file_get_contents($filename) { $fd = fopen("$filename", "rb"); $content = fread($fd, filesize($filename)); fclose($fd); return $content; } } function fileCRC($path) { $fileString = file_get_contents($path); $crc = crc32($fileString); return sprintf("%u", $crc); } function CRCCryptData($data, $pwdString, $type) { $type = strtoupper($type); if ($type != "D") $type = "E"; $res_data = ""; if ($type == 'D') $data = urldecode($data); $key[] = ""; $box[] = ""; $temp_swap = ""; $pwdLength = CUtil::BinStrlen($pwdString); for ($i = 0; $i <= 255; $i++) { $key[$i] = ord(CUtil::BinSubstr($pwdString, ($i % $pwdLength), 1)); $box[$i] = $i; } $x = 0; for ($i = 0; $i <= 255; $i++) { $x = ($x + $box[$i] + $key[$i]) % 256; $temp_swap = $box[$i]; $box[$i] = $box[$x]; $box[$x] = $temp_swap; } $temp = ""; $k = ""; $cipherby = ""; $cipher = ""; $a = 0; $j = 0; for ($i = 0, $n = CUtil::BinStrlen($data); $i < $n; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $temp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $temp; $k = $box[(($box[$a] + $box[$j]) % 256)]; $cipherby = ord(CUtil::BinSubstr($data, $i, 1)) ^ $k; $cipher .= chr($cipherby); } if ($type == 'D') $res_data = urldecode(urlencode($cipher)); else $res_data = urlencode($cipher); return $res_data; } function CRCPrepareFileInfo($path) { $path = str_replace("\\", "/", $path); $fileSize = filesize($_SERVER["DOCUMENT_ROOT"].$path); $fileCRC = fileCRC($_SERVER["DOCUMENT_ROOT"].$path); return "*".$path."*".$fileSize."*".$fileCRC; } function CRCGetDirRec($path, $arExcept, &$hFile) { $path = str_replace("\\", "/", $path); if ($handle = @opendir($_SERVER["DOCUMENT_ROOT"].$path)) { while (($file = readdir($handle)) !== false) { if ($file == "." || $file == "..") continue; $bExcept = False; for ($i = 0; $i < count($arExcept); $i++) { if ( strlen($path."/".$file) >= strlen($arExcept[$i]) && substr($path."/".$file, 0, strlen($arExcept[$i])) == $arExcept[$i]) { $bExcept = True; break; } } if ($bExcept) continue; if (is_dir($_SERVER["DOCUMENT_ROOT"].$path."/".$file)) { CRCGetDirRec($path."/".$file, $arExcept, $hFile); } else { fwrite($hFile, CRCPrepareFileInfo($path."/".$file)."\n"); } } closedir($handle); } return; } function CRCVerifyDirRec($path, $arExcept, &$hFileError, &$logData) { $path = str_replace("\\", "/", $path); if ($handle = @opendir($_SERVER["DOCUMENT_ROOT"].$path)) { while (($file = readdir($handle)) !== false) { if ($file == "." || $file == "..") continue; $bExcept = False; for ($i = 0; $i < count($arExcept); $i++) { if ( strlen($path."/".$file) >= strlen($arExcept[$i]) && substr($path."/".$file, 0, strlen($arExcept[$i])) == $arExcept[$i]) { $bExcept = True; break; } } if ($bExcept) continue; if (is_dir($_SERVER["DOCUMENT_ROOT"].$path."/".$file)) { CRCVerifyDirRec($path."/".$file, $arExcept, $hFileError, $logData); } else { if (strpos($logData, "*".$path."/".$file."*") === false) fwrite($hFileError, str_replace("#FILE#", $path."/".$file, GetMessage("MFCW_C_FILE_NEW"))."\n"); } } closedir($handle); } return; } function CRCVerify($path, $arExcept, $logName, &$hFileError) { $hFile = fopen($logName, "r"); while (!feof($hFile)) { $buffer = fgets($hFile, 4096); if (strlen($buffer) > 0) { $arBuffer = explode("*", $buffer); if (count($arBuffer) < 4) { $errorCnt++; fwrite($hFileError, str_replace("#BUF#", $buffer, GetMessage("MFCW_C_STR_BAD"))."\n"); } else { $bShouldCheck = False; if (strlen($path) <= 0 || substr($arBuffer[1], 0, strlen($path)) == $path) { $bShouldCheck = True; for ($i = 0; $i < count($arExcept); $i++) { if ( strlen($arBuffer[1]) >= strlen($arExcept[$i]) && substr($arBuffer[1], 0, strlen($arExcept[$i])) == $arExcept[$i]) { $bShouldCheck = False; break; } } } if ($bShouldCheck) { if (!file_exists($_SERVER["DOCUMENT_ROOT"].$arBuffer[1])) { $errorCnt++; fwrite($hFileError, str_replace("#FILE#", $_SERVER["DOCUMENT_ROOT"].$arBuffer[1], GetMessage("MFCW_C_NO_FILE"))."\n"); } else { $fs = filesize($_SERVER["DOCUMENT_ROOT"].$arBuffer[1]); if ($fs != $arBuffer[2]) { $errorCnt++; fwrite($hFileError, str_replace("#NS#", $fs, str_replace("#OS#", $arBuffer[2], str_replace("#FILE#", $_SERVER["DOCUMENT_ROOT"].$arBuffer[1], GetMessage("MFCW_C_FILE_SIZE"))))."\n"); } else { $crc = fileCRC($_SERVER["DOCUMENT_ROOT"].$arBuffer[1]); if ($crc != Trim($arBuffer[3])) { $errorCnt++; fwrite($hFileError, str_replace("#NS#", $crc, str_replace("#OS#", Trim($arBuffer[3]), str_replace("#FILE#", $_SERVER["DOCUMENT_ROOT"].$arBuffer[1], GetMessage("MFCW_C_FILE_CRC"))))."\n"); } else { $goodCnt++; } } } } } } } fclose($hFile); $logData = file_get_contents($logName); CRCVerifyDirRec($path, $arExcept, $hFileError, $logData); } function GetIntegrityParams($data, $password) { if (strlen($data) <= 0) return False; $dataNew = CRCCryptData($data, $password, "D"); $arDataNew = explode("*", $dataNew); if (count($arDataNew) != 2) return False; return array("CRC" => $arDataNew[0], "KEY" => $arDataNew[1]); } function SetIntegrityParams($arData, $password) { if (!is_array($arData) || !isset($arData["CRC"]) || !isset($arData["KEY"])) return False; $data = $arData["CRC"]."*".$arData["KEY"]; $dataNew = CRCCryptData($data, $password, "E"); return $dataNew; } if ($REQUEST_METHOD == "GET" && $get_data_file == "Y" && $isAdmin && check_bitrix_sessid()) { $bUseCompression = (function_exists("gzcompress") ? True : False); $streamFileName = $serverFileLog; if ($bUseCompression) { $streamFileName = $serverFileLog."2"; $zp_file = gzopen($serverFileLog."2", "wb9f"); $hFile = fopen($serverFileLog, "rb"); while (!feof($hFile)) { $buffer = fgets($hFile, 4096); if (strlen($buffer) > 0) gzwrite($zp_file, $buffer); } gzclose($zp_file); fclose($hFile); } $filesize = filesize($streamFileName); header($_SERVER["SERVER_PROTOCOL"]." 200 OK"); header("Content-Type: application/force-download; name=\"".substr($serverFileLogName, 1)."\""); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".$filesize); header("Content-Disposition: attachment; filename=\"".substr($serverFileLogName, 1)."\""); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); header("Pragma: public"); $p = file_get_contents($streamFileName); echo $p; flush(); if ($bUseCompression) { if (!@unlink($serverFileLog."2")) $errorMessage .= str_replace("#FILE#", $serverFileLog."2", GetMessage("MFCW_CANT_DEL_FILE"))."
"; } } if ($REQUEST_METHOD == "GET" && $delete_errlog == "Y" && $isAdmin && check_bitrix_sessid()) { if (!@unlink($serverFileLogError)) $errorMessage .= str_replace("#FILE#", $serverFileLogError, GetMessage("MFCW_CANT_DEL_LOG"))."
"; } if ($REQUEST_METHOD == "POST" && $action == "load" && $isAdmin && check_bitrix_sessid()) { if (!isset($_FILES["crc_file"]) || !is_uploaded_file($_FILES["crc_file"]["tmp_name"])) $errorMessage .= GetMessage("MFCW_FILE_NOT_LOAD")."
"; if (strlen($errorMessage) <= 0) { $bUseCompression = (function_exists("gzcompress") ? True : False); if ($bUseCompression && $crc_unpack_file == "Y") { $hFile = fopen($serverFileLog, "wb"); $zp_file = gzopen($_FILES["crc_file"]["tmp_name"], "rb9f"); while (!gzeof($zp_file)) { $buffer = gzread($zp_file, 4096); if (strlen($buffer) > 0) fwrite($hFile, $buffer); } gzclose($zp_file); fclose($hFile); $okMessage .= GetMessage("MFCW_FILE_LOAD_SUCCESS")."
"; } else { if (copy($_FILES["crc_file"]["tmp_name"], $serverFileLog)) $okMessage .= GetMessage("MFCW_FILE_LOAD_SUCCESS")."
"; else $errorMessage .= GetMessage("MFCW_FILE_CANT_COPY")."
"; } } } if ($REQUEST_METHOD == "POST" && $action == "integrity" && $isAdmin && check_bitrix_sessid()) { if (strlen($crc_password) <= 0) { $errorMessage .= GetMessage("MFCW_NO_PASSWORD")."
"; $aMsg[] = array("id"=>"crc_password", "text"=>GetMessage("MFCW_NO_PASSWORD")); } elseif(strlen($errorMessage) <= 0 && $crc_password_check != $crc_password) { $errorMessage .= GetMessage("MFCW_NO_PASSWORD_CONF")."
"; $aMsg[] = array("id"=>"crc_password_check", "text"=>GetMessage("MFCW_NO_PASSWORD_CONF")); $aMsg[] = array("id"=>"crc_password", "text"=>""); } if (strlen($errorMessage) <= 0) { $bVerify = True; if (strlen($crc_collect) > 0) $bVerify = False; if (!$bVerify) { if (strlen($crc_key) <= 0) { $errorMessage .= GetMessage("MFCW_NO_NEW_KEY")."
"; $aMsg[] = array("id"=>"crc_key", "text"=>GetMessage("MFCW_NO_NEW_KEY")); } } } if (strlen($errorMessage) <= 0) { if (!$bVerify) { if ($crc_key == $crc_password) { $errorMessage .= GetMessage("MFCW_KEY_PASS")."
"; $aMsg[] = array("id"=>"crc_key", "text"=>GetMessage("MFCW_KEY_PASS")); $aMsg[] = array("id"=>"crc_password", "text"=>""); } } } if (strlen($errorMessage) <= 0) { if ($bVerify) { $fileString = file_get_contents(__FILE__); $fileString = preg_replace("#<"."\?[\s]*define\(\"INTEGRITY_VALUE\",[\s]*\"[^\"]*?\"\);?[\s]*\?".">#i", "", $fileString); $currentCRC = sprintf("%u", crc32($fileString)); if (strlen($INTEGRITY_VALUE) > 0) { if ($arIntegrityParams = GetIntegrityParams($INTEGRITY_VALUE, $crc_password)) { if ($arIntegrityParams["CRC"] != $currentCRC) $errorMessage .= GetMessage("MFCW_CRC_CHANGED")."
"; else $okMessage .= str_replace("#KEY#", $arIntegrityParams["KEY"], GetMessage("MFCW_INT_CHECK"))."
"; } else { $errorMessage .= GetMessage("MFCW_INT_BAD")."
"; } } else { $errorMessage .= GetMessage("MFCW_INT_NO")."
"; } } else { $fileString = file_get_contents(__FILE__); $fileString = preg_replace("#<"."\?[\s]*define\(\"INTEGRITY_VALUE\",[\s]*\"[^\"]*?\"\);?[\s]*\?".">#i", "", $fileString); $currentCRC = sprintf("%u", crc32($fileString)); $data = SetIntegrityParams( array("CRC" => $currentCRC, "KEY" => $crc_key), $crc_password ); $fileString = "<"."?define(\"INTEGRITY_VALUE\",\"".$data."\");?".">".$fileString; $hFile = fopen(__FILE__, "wb"); fwrite($hFile, $fileString); fclose($hFile); $INTEGRITY_VALUE = $data; $okMessage .= GetMessage("MFCW_KEY_SET")."
"; } } } if ($REQUEST_METHOD == "POST" && $action == "check" && $isAdmin && check_bitrix_sessid()) { if (strlen($crc_password) <= 0) { $errorMessage .= GetMessage("MFCW_NO_PASSWORD")."
"; $aMsg[] = array("id"=>"crc_password", "text"=>GetMessage("MFCW_NO_PASSWORD")); } elseif(strlen($errorMessage) <= 0 && $crc_password_check != $crc_password) { $errorMessage .= GetMessage("MFCW_NO_PASSWORD_CONF")."
"; $aMsg[] = array("id"=>"crc_password_check", "text"=>GetMessage("MFCW_NO_PASSWORD_CONF")); $aMsg[] = array("id"=>"crc_password", "text"=>""); } if (strlen($errorMessage) <= 0) { $crc_kernel = (($crc_kernel == "Y") ? "Y" : "N"); $crc_special = (($crc_special == "Y") ? "Y" : "N"); $crc_public = (($crc_public == "Y") ? "Y" : "N"); if ($crc_kernel != "Y" && $crc_special != "Y" && $crc_public != "Y") { $errorMessage = GetMessage("MFCW_NO_AREA")."
"; $aMsg[] = array("id"=>"crc_kernel", "text"=>GetMessage("MFCW_NO_AREA")); $aMsg[] = array("id"=>"crc_public", "text"=>""); $aMsg[] = array("id"=>"crc_special", "text"=>""); } } if (strlen($errorMessage) <= 0) { $bVerify = True; if (strlen($crc_collect) > 0) $bVerify = False; if ($bVerify) { if (!file_exists($serverFileLog)) $errorMessage = GetMessage("MFCW_NO_VERIFILE")."
"; } } if (strlen($errorMessage) <= 0) { if ($bVerify) { $fileString = file_get_contents($serverFileLog); $fileStringNew = CRCCryptData($fileString, $crc_password, "D"); if (substr($fileStringNew, 0, 1) == "*") { $hFile = fopen($serverFileLog."1", "wb"); fwrite($hFile, $fileStringNew); fclose($hFile); } else { $errorMessage .= GetMessage("MFCW_ERR_DECRYPT"); } } } if (strlen($errorMessage) <= 0) { $aExceptSpec = array( BX_ROOT."/modules", BX_PERSONAL_ROOT."/cache", BX_PERSONAL_ROOT."/cache_image", BX_PERSONAL_ROOT."/managed_cache", BX_PERSONAL_ROOT."/stack_cache", ); if ($bVerify) { $hFileError = fopen($serverFileLogError, "wb"); if ($crc_kernel == "Y") CRCVerify(BX_ROOT."/modules", array(BX_ROOT."/modules".$serverFileLogName, BX_ROOT."/modules".$serverFileLogName."1", BX_ROOT."/modules".$serverFileLogNameError), $serverFileLog."1", $hFileError); if ($crc_special == "Y") { CRCVerify(BX_ROOT, $aExceptSpec, $serverFileLog."1", $hFileError); if(BX_PERSONAL_ROOT <> BX_ROOT) CRCVerify(BX_PERSONAL_ROOT, $aExceptSpec, $serverFileLog."1", $hFileError); } if ($crc_public == "Y") CRCVerify("", array(BX_ROOT, "/upload"), $serverFileLog."1", $hFileError); fclose($hFileError); if (!@unlink($serverFileLog."1")) $errorMessage .= str_replace("#FILE#", $serverFileLog."1", GetMessage("MFCW_CANT_DEL_FILE"))."
"; $okMessage .= GetMessage("MFCW_CHECK_FINISH")."
"; } else { $hFile = fopen($serverFileLog."1", "w"); if ($crc_kernel == "Y") CRCGetDirRec(BX_ROOT."/modules", array(BX_ROOT."/modules".$serverFileLogName, BX_ROOT."/modules".$serverFileLogName."1", BX_ROOT."/modules".$serverFileLogNameError), $hFile); if ($crc_special == "Y") { CRCGetDirRec(BX_ROOT, $aExceptSpec, $hFile); if(BX_PERSONAL_ROOT <> BX_ROOT) CRCGetDirRec(BX_PERSONAL_ROOT, $aExceptSpec, $hFile); } if ($crc_public == "Y") CRCGetDirRec("", array(BX_ROOT, "/upload"), $hFile); fclose($hFile); sleep(3); $fileString = file_get_contents($serverFileLog."1"); $fileStringNew = CRCCryptData($fileString, $crc_password, "E"); $hFile = fopen($serverFileLog, "wb"); fwrite($hFile, $fileStringNew); fclose($hFile); if (!@unlink($serverFileLog."1")) $errorMessage .= str_replace("#FILE#", $serverFileLog."1", GetMessage("MFCW_CANT_DEL_FILE"))."
"; $okMessage .= GetMessage("MFCW_INFO_CHECK")."
"; } } } $APPLICATION->SetTitle(GetMessage("MFCW_FILE_TITLE")); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $aTabs = array( array("DIV" => "edit1", "TAB" => GetMessage("MFCW_TAB_1"), "ICON" => "file_check", "TITLE" => GetMessage("MFCW_FILE_CHECK")), array("DIV" => "edit2", "TAB" => GetMessage("MFCW_TAB_2"), "ICON" => "file_check", "TITLE" => GetMessage("MFCW_LOAD_VERIFILE_T")), array("DIV" => "edit3", "TAB" => GetMessage("MFCW_TAB_3"), "ICON" => "file_check", "TITLE" => GetMessage("MFCW_INT_TITLE")), ); $tabControl = new CAdminTabControl("tabControl", $aTabs, true, true); if(!empty($aMsg)) { $e = new CAdminException($aMsg); $APPLICATION->ThrowException($e); if($e = $APPLICATION->GetException()) { $message = new CAdminMessage(GetMessage("MFCW_ERROR"), $e); if($message) echo $message->Show(); } } if(strlen($okMessage)>0) CAdminMessage::ShowMessage(Array("MESSAGE" =>$okMessage, "TYPE"=>"OK")); if(strlen($errorMessage)>0 && !$message) CAdminMessage::ShowMessage($errorMessage); $tabControl->Begin(); ?>