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']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $parts = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $ip = trim($parts[0]); } } return preg_replace('/[^0-9a-fA-F\:\.]/', '', $ip); } function guard_ua() { return isset($_SERVER['HTTP_USER_AGENT']) ? substr($_SERVER['HTTP_USER_AGENT'], 0, 512) : ''; } function guard_random_hex($len = 16) { if (function_exists('openssl_random_pseudo_bytes')) { $bytes = @openssl_random_pseudo_bytes($len / 2); if ($bytes !== false) return bin2hex($bytes); } $hex = ''; for ($i = 0; $i < $len; $i++) $hex .= dechex(mt_rand(0, 15)); return $hex; } function guard_tempfile_for_ip($ip) { return sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'guard_rl_' . md5($ip) . '.json'; } // ========== Clearance Cookie ========== func.........完整代码请登录后点击上方下载按钮下载查看
网友评论0