修复日志页面卡顿我呢提
This commit is contained in:
+20
-168
@@ -4,26 +4,27 @@
|
||||
* 客户端指纹信息风险评估处理器
|
||||
* 接收前端发送的指纹数据并进行综合风险判断
|
||||
*/
|
||||
session_start();
|
||||
// 设置响应头为JSON格式
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
require_once __DIR__ . '/cong.php';
|
||||
require_once __DIR__ . '/lib/CloakHttpHelpers.php';
|
||||
require_once __DIR__ . '/lib/Cloak/CloakSession.php';
|
||||
|
||||
CloakFcheckCors::handlePreflight();
|
||||
CloakSession::start();
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
CloakFcheckCors::emitHeaders();
|
||||
|
||||
// 确保请求方法为POST
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
http_response_code(405);
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
'message' => '只允许POST请求'
|
||||
'status' => 'error',
|
||||
'message' => '只允许POST请求',
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 获取并解析请求数据
|
||||
$hdata = $_POST['hdata'] ?? '';
|
||||
$decodedString = base64_decode($hdata, true);
|
||||
$fingerprint_info = is_string($decodedString) ? json_decode($decodedString, true) : null;
|
||||
|
||||
if (!is_array($fingerprint_info) || empty($fingerprint_info['domain'])) {
|
||||
if ($hdata === '') {
|
||||
http_response_code(400);
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
@@ -32,170 +33,21 @@ if (!is_array($fingerprint_info) || empty($fingerprint_info['domain'])) {
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/cong.php';
|
||||
require_once __DIR__ . '/lib/DbHelper.php';
|
||||
require_once __DIR__ . '/lib/bootstrap.php';
|
||||
require_once __DIR__ . '/config/ConfigLoader.php';
|
||||
require_once __DIR__ . '/lib/Cloak/FpUrlHelper.php';
|
||||
require_once __DIR__ . '/lib/Cloak/VisitorApiAudit.php';
|
||||
require_once __DIR__ . '/lib/Cloak/RiskSecondaryGate.php';
|
||||
require_once __DIR__ . '/lib/Cloak/FCheckHandler.php';
|
||||
|
||||
$fp_host = parse_url($fingerprint_info['domain'], PHP_URL_HOST);
|
||||
if (empty($fp_host)) {
|
||||
$fp_host = $_SERVER['HTTP_HOST'] ?? '';
|
||||
}
|
||||
$config_name = ConfigLoader::loadByHost($fp_host);
|
||||
|
||||
$log_id = (int) ($fingerprint_info['log_id'] ?? 0);
|
||||
|
||||
if (!RiskSecondaryGate::isEnabled()) {
|
||||
$_SESSION['visit_to_3'] = 3;
|
||||
$_SESSION['check_result'] = 'true';
|
||||
|
||||
$resolved = FpUrlHelper::resolve($config_name, true);
|
||||
$fp_url = $resolved['url'];
|
||||
$response = [
|
||||
'reason' => '',
|
||||
'result' => true,
|
||||
'link' => $fp_url !== '' ? $fp_url : FpUrlHelper::fallbackUrl(),
|
||||
];
|
||||
|
||||
if ($log_id > 0) {
|
||||
$conn = new mysqli('localhost', DB_USERNAME, DB_PASSWORD, DB_NAME);
|
||||
if (!$conn->connect_error) {
|
||||
require_once __DIR__ . '/lib/Cloak/VisitorLogSchema.php';
|
||||
VisitorLogSchema::ensureColumns($conn);
|
||||
$resultEsc = cloak_db_escape($conn, 'true');
|
||||
$reasonEsc = cloak_db_escape($conn, '二次风控已关闭');
|
||||
$fpUrlEsc = cloak_db_escape($conn, strip_tags(cloak_db_string($response['link'])));
|
||||
$sql = "UPDATE `visitor_logs` SET `result`='{$resultEsc}',`reason`='{$reasonEsc}',`fp_url`='{$fpUrlEsc}' WHERE `id`='" . $log_id . "'";
|
||||
if ($conn->query($sql) !== true) {
|
||||
$handle = fopen(dirname(__FILE__) . '/err.txt', 'a+');
|
||||
fwrite($handle, date('Y-m-d H:i:s') . ' | f_check risk disabled update: ' . $conn->error . "\n");
|
||||
fclose($handle);
|
||||
}
|
||||
$conn->close();
|
||||
}
|
||||
}
|
||||
|
||||
exit(json_encode($response));
|
||||
}
|
||||
|
||||
$jsonData = [
|
||||
'id' => COSTM_IP_SCORE,
|
||||
'hdata' => $hdata,
|
||||
'referer' => $fingerprint_info['referer'] ?? '',
|
||||
'domain' => $fingerprint_info['domain'],
|
||||
'ip' => $fingerprint_info['ip'] ?? '',
|
||||
'risk_enhanced' => defined('CLOAK_RISK_ENHANCED') && strtoupper(CLOAK_RISK_ENHANCED) === 'ON' ? 1 : 0,
|
||||
'risk_number' => CLOAK_RISK_NUMBER,
|
||||
];
|
||||
|
||||
$ch = curl_init('www.tiktokba.com/cloak/byApiRisk');
|
||||
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, get_SERVER_value('HTTP_USER_AGENT'));
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
||||
|
||||
curl_setopt($ch, CURLOPT_ENCODING, '');
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
'Content-type: application/x-www-form-urlencoded',
|
||||
'escloak-key: ' . CHECK_KEY,
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($jsonData));
|
||||
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'forward_response_cookies');
|
||||
if ($_COOKIE) {
|
||||
curl_setopt($ch, CURLOPT_COOKIE, encode_visitor_cookies());
|
||||
}
|
||||
$return = curl_exec($ch);
|
||||
if ($return === false) {
|
||||
http_response_code(502);
|
||||
$result = FCheckHandler::processFromHdata($hdata);
|
||||
if (empty($result['ok'])) {
|
||||
$status = (int) ($result['status'] ?? 400);
|
||||
http_response_code($status);
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
'message' => 'Curl error: ' . curl_error($ch),
|
||||
]);
|
||||
curl_close($ch);
|
||||
exit;
|
||||
}
|
||||
curl_close($ch);
|
||||
$return = json_decode($return, true);
|
||||
if (!is_array($return)) {
|
||||
http_response_code(502);
|
||||
echo json_encode([
|
||||
'status' => 'error',
|
||||
'message' => '风控 API 返回无效',
|
||||
'message' => $result['message'] ?? '处理失败',
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$_SESSION['visit_to_3'] = 3;
|
||||
$response = [];
|
||||
$response['reason'] = $return['reason'];
|
||||
$response['result'] = $return['result'];
|
||||
|
||||
if($return['result']) {
|
||||
$_SESSION["check_result"] = "true"; // 通过指纹参数
|
||||
$resolved = FpUrlHelper::resolve($config_name, true);
|
||||
$fp_url = $resolved['url'];
|
||||
$response['link'] = $fp_url;
|
||||
} else {
|
||||
$_SESSION["check_result"] = "false"; // 未通过指纹参数
|
||||
if(CLOAK_REDIRECT_METHOD == 'curl') {
|
||||
$response['link'] = '';
|
||||
} else {
|
||||
$zp_url = DB_ZP;
|
||||
$response['link'] = $zp_url;
|
||||
}
|
||||
}
|
||||
|
||||
$update_log = [];
|
||||
$update_log['result'] = $response['result'] ? 'true' : 'false';
|
||||
$update_log['reason'] = $response['reason'] ?? '';
|
||||
$update_log['fp_url'] = trim((string) ($response['link'] ?? ''));
|
||||
if ($update_log['fp_url'] === '') {
|
||||
$update_log['fp_url'] = $update_log['result'] === 'true'
|
||||
? FpUrlHelper::fallbackUrl()
|
||||
: (defined('DB_ZP') ? (string) DB_ZP : '');
|
||||
}
|
||||
|
||||
$servername = "localhost";
|
||||
$username = DB_USERNAME;
|
||||
$password = DB_PASSWORD;
|
||||
$dbname = DB_NAME;
|
||||
|
||||
// Create connection
|
||||
$conn = new mysqli($servername, $username, $password, $dbname);
|
||||
// Check connection
|
||||
if ($conn->connect_error) {
|
||||
$error = "Connection failed: " . $conn->connect_error;
|
||||
$handle = fopen(dirname(__FILE__) . "/err.txt", "a+");
|
||||
fwrite($handle, date("Y-m-d H:i:s") . ' | ' . $error . "\n");
|
||||
fclose($handle);
|
||||
} elseif ($log_id > 0) {
|
||||
$resultEsc = cloak_db_escape($conn, $update_log['result'] ?? '');
|
||||
$reasonEsc = cloak_db_escape($conn, strip_tags(cloak_db_string($update_log['reason'] ?? '')));
|
||||
$fpUrlEsc = cloak_db_escape($conn, strip_tags(cloak_db_string($update_log['fp_url'] ?? '')));
|
||||
$fpHdataJson = json_encode($fingerprint_info, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
if ($fpHdataJson === false) {
|
||||
$fpHdataJson = '';
|
||||
}
|
||||
$fpHdataEsc = cloak_db_escape($conn, $fpHdataJson);
|
||||
$apiRiskReqEsc = cloak_db_escape($conn, VisitorApiAudit::encode($jsonData));
|
||||
$apiRiskRespEsc = cloak_db_escape($conn, VisitorApiAudit::encode($return));
|
||||
require_once __DIR__ . '/lib/Cloak/VisitorLogSchema.php';
|
||||
VisitorLogSchema::ensureColumns($conn);
|
||||
$sql = "UPDATE `visitor_logs` SET `result`='{$resultEsc}',`reason`='{$reasonEsc}',`fp_url`='{$fpUrlEsc}',`fp_hdata`='{$fpHdataEsc}',`api_risk_request`='{$apiRiskReqEsc}',`api_risk_response`='{$apiRiskRespEsc}' WHERE `id`='" . (int) $log_id . "'";
|
||||
|
||||
if ($conn->query($sql) != TRUE) {
|
||||
$handle = fopen(dirname(__FILE__) . "/err.txt", "a+");
|
||||
fwrite($handle, date("Y-m-d H:i:s") . ' | ' . "Error: " . $sql . "<br>" . $conn->error . "\n");
|
||||
fclose($handle);
|
||||
}
|
||||
$conn->close();
|
||||
}
|
||||
|
||||
// 记录日志
|
||||
exit(json_encode($response));
|
||||
unset($result['ok'], $result['status'], $result['fingerprint_info'], $result['api_request'], $result['api_response']);
|
||||
echo json_encode($result);
|
||||
|
||||
Reference in New Issue
Block a user