php实现请求限流人机验证真人验证代码

代码语言:php

所属分类:其他

代码描述:php实现请求限流人机验证真人验证代码,可检测是否机器爬虫操作进行验证,可手动触发验证机制,可设置频率。

代码标签: php 请求 限流 人机 验证 真人 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<?php
/**
 * guard.php - PHP 5.6 单文件人机验证脚本
 * 用法:在任意需要保护的 PHP 页顶引入:require __DIR__.'/guard.php';
 * 提示:必须在任何输出前引入,否则 setcookie/header 可能失败。
 */

if (!defined('GUARD_LOADED')) {
    define('GUARD_LOADED', 1);

    // ========== 配置 ==========
    $GUARD = array(
        'secret'              => 'CHANGE1_ME_TO_A_RANDOM_32_64_CHARS', // 必改
        'cookie_name'         => 'guard_clearance',
        'cookie_ttl'          => 10,  // clearance 生效时长(秒)
        'rate_limit_per_min'  => 2,   // 每分钟最大请求数(超过触发挑战)
        'challenge_wait'      => 3,     // 挑战页等待秒数
        'trust_proxy'         => false, // 若站点在可信代理后,请根据实际开启并正确取源 IP
        'force_param'         => 'guard_verify', // 手动触发验证的 GET 参数
    );

    // ========== Polyfill ==========
    if (!function_exists('hash_equals')) {
        function hash_equals($a, $b) {
            if (!is_string($a) || !is_string($b) || strlen($a) !== strlen($b)) return false;
            $res = $a ^ $b;
            $ret = 0;
            for ($i = 0; $i < strlen($res); $i++) $ret |= ord($res[$i]);
            return $ret === 0;
        }
    }

    // ========== 工具函数 ==========
    function guard_ip() {
        global $GUARD;
        $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0';
        if ($GUARD['trust_proxy']) {
            if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
                $ip = $_SERVER['HTTP_CF_CONNECTING_IP.........完整代码请登录后点击上方下载按钮下载查看

网友评论0