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