php实现检测curl的爬虫检测真实浏览器请求监测代码
代码语言:php
所属分类:其他
代码描述:php实现检测curl的爬虫检测真实浏览器请求监测代码
代码标签: php 检测 curl 爬虫 检测 真实 浏览器 请求 监测 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<?php
/**
* PHP 5.6 Single-File "Are you human?" JavaScript Challenge
*
* Simulates a Cloudflare-style browser check to block simple bots.
* This script must be placed at the very beginning of your execution flow.
*
* @version 1.2 (Fixed)
* @author AI Assistant
* @license MIT
*/
// 错误报告,在生产环境中建议设置为 0
error_reporting(E_ALL);
ini_set('display_errors', 1);
// --- 配置 ---
// 设置一个密钥,用于增强挑战的复杂度。请修改成你自己的随机字符串。
define('CHALLENGE_SECRET_KEY', 'change1-this-to-a-long-random-string-!@#$%^');
// 验证成功后 session 的有效期(秒)。默认为 1 小时。
define('SESSION_LIFETIME', 3600);
// --- 配置结束 ---
// 确保 session 已经启动
if (session_id() == '') {
session_start();
}
/**
* PHP 5.6 及以下版本可能没有 hash_equals 函数,这是一个兼容实现。
* 用于防止计时攻击。
*/
if (!function_exists('hash_equals')) {
function hash_equals($str1, $str2)
{
if (strlen($str1) != strlen($str2)) {
return false;
} else {
$res = $str1 ^ $str2;
$ret = 0;
for ($i = strlen($res) - 1; $i >= 0; $i--) {
$ret |= ord($res[$i]);
}
return !$ret;
}
}
}
/**
* 主逻辑控制器
*/
function main_controller()
{
// 1. 检查用户是否已经通过验证
if (isset($_SESSION['is_human']) && $_SESSION['is_human'] === true) {
// 如果 session 中有标记,并且距离上次验证没有超时
if (isset($_SESSION['verified_at']) && (time() - $_SESSION['verified_at']) < SESSION_LIFETIME) {
show_protected_content();
return;
}
}
// 2. 检查是否是来自挑战页面的 POST 请求
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['challenge_response'])) {
if (verify_challenge_response()) {
// 验证成功, 标记用户并通过
$_SESSION['is_human'] = true;
$_SESSION['verified_at'] = time();
// 重定向到当前页面,清除 POST 数据,显示正常内容
// 使用 strtok 清除 URL 中的查询字符串,避免重定向循环
$redirect_url = strtok($_SERVER["REQUEST_URI"], '?');
header('Location: ' . $redirect_url);
exit;
} else {
// 验证失败, 再次显示挑战页面并给出错误提示
unset($_SESSION['challenge_token']); // 清除旧的token
.........完整代码请登录后点击上方下载按钮下载查看















网友评论0