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