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