v_ip); if ($times + 1 >= AUTO_BLACK_TIMES) { write_black_list($v_info->v_ip); } } if (!isset($_SESSION['visit_to_3'])) { $_SESSION['visit_to_3'] = '1'; } if (RiskSecondaryGate::isEnabledForRequest()) { $cached = RiskSecondaryCache::get(ClientIpResolver::resolve()); if ($cached !== null) { self::renderFromRiskCache($logs, $v_info, $cached, $config_name); return; } } if (($_SESSION['visit_to_3'] ?? '1') != '3' && RiskSecondaryGate::isEnabledForRequest()) { // 二次风控:先写 wait 状态,f_check 完成后再更新 result / fp_url(避免 true+空跳转) $logs['result'] = 'wait'; $logs['reason'] = '二次风控检测中'; $logs['fp_url'] = ''; $log_id = write_log_db($logs); RiskSecondarySession::markWaitLog($log_id); $riskCtx = [ 'logs' => $logs, 'v_info' => $v_info, 'log_id' => $log_id, ]; if (CLOAK_REDIRECT_METHOD == 'curl') { self::renderRiskCurlInject($riskCtx); return; } RiskPageRenderer::render($riskCtx); return; } $logs['result'] = 'true'; $logs['reason'] = ''; self::renderFpPage($logs, $config_name); } /** * @param array $logs * @param string $config_name */ private static function renderFpPage(array $logs, $config_name = '') { FpPageRenderer::render([ 'logs' => $logs, 'config_name' => $config_name, 'skip_log' => RiskSecondarySession::shouldSkipFpPageLog(), ]); } /** * 二次风控 Session 缓存命中:跳过 cloakjs / byApiRisk。 * * @param array $logs * @param array $cached * @param string $config_name */ private static function renderFromRiskCache(array $logs, $v_info, array $cached, $config_name = '') { RiskSecondaryCache::applyToSession($cached); $apiResponse = RiskSecondaryCache::toApiResponse($cached); $logs['result'] = $apiResponse['result'] ? 'true' : 'false'; $logs['reason'] = cloak_cache_hit_log_reason($logs['result']); $logs['fp_url'] = trim((string) ($apiResponse['link'] ?? '')); if ($logs['fp_url'] === '') { $logs['fp_url'] = $logs['result'] === 'true' ? FpUrlHelper::fallbackUrl() : (defined('DB_ZP') ? (string) DB_ZP : ''); } if ($logs['result'] === 'false') { self::renderSafePage($logs, $v_info); return; } self::renderFpPage($logs, $config_name); } /** * @param array $ctx 需含 v_info, log_id */ private static function renderRiskCurlInject(array $ctx) { extract($ctx, EXTR_SKIP); $zp_url = DB_ZP; $html = file_get_content_sstr($zp_url); $_html = caiji_lujing_buquan($html, $zp_url, $_SERVER['HTTP_HOST']); ob_start(); require dirname(__DIR__, 3) . '/cloakjs.php'; $js_to_inject = ob_get_clean(); if (hasHeadTag($_html)) { $new_html = preg_replace('/(]*>)/i', "$1\n" . $js_to_inject, $_html); } else { $new_html = $js_to_inject . $_html; } echo $new_html; exit; } private static function echoJsRedirect($zp_url) { $zp_url_js = htmlspecialchars($zp_url, ENT_QUOTES, 'UTF-8'); echo ''; } }