php+html实现随机小球点击人机验证前后端代码
代码语言:php
所属分类:其他
代码描述:php+html实现随机小球点击人机验证前后端代码,小球每隔几秒更换位置,有三次机会,三次错误后要等半个小时,数据统计加密传输。
代码标签: php html 随机 小球 点击 人机 验证 前 后端 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<?php // PHP 5.6 Compatible Version - FINAL FIX // --- START: Configuration --- define('RATE_LIMIT_FILE', dirname(__FILE__) . '/rate_limit_logs.json'); define('MAX_FAILURES', 3); define('BLOCK_MINUTES', 30); // --- END: Configuration --- if (session_status() == PHP_SESSION_NONE) { session_start(); } function get_ip_address() { if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]; } return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'unknown'; } function check_rate_limit_status($ip) { $now = time(); $fp = @fopen(RATE_LIMIT_FILE, 'r'); if (!$fp) return array('is_blocked' => false, 'message' => ''); flock($fp, LOCK_SH); $raw_data = stream_get_contents($fp); flock($fp, LOCK_UN); fclose($fp); $ip_data = empty($raw_data) ? array() : json_decode($raw_data, true); $record = isset($ip_data[$ip]) ? $ip_data[$ip] : array('block_until' => 0); if ($record['block_until'] > $now) { $remaining = ceil(($record['block_until'] - $now) / 60); return array('is_blocked' => true, 'message' => "尝试次数过多,请在 {$remaining} 分钟后重试。"); } return array('is_blocked' => false, 'message' => ''); } function record_failure_and_get_status($ip) { $now = time(); $fp = fopen(RATE_LIMIT_FILE, 'c+'); if (!$fp || !flock($fp, LOCK_EX)) { if ($fp) fclose($fp); return array('is_blocked' => false, 'message' => '无法写入日志'); } $raw_data = stream_get_contents($fp); $ip_data = empty($raw_data) ? array() : json_decode($raw_data, true); $record = isset($ip_data[$ip]) ? $ip_data[$ip] : array('failures' => 0, 'block_until' => 0); if (isset($record['block_until']) && $record['block_until'] > 0 && $record['block_until'] < $now) { $record['failures'] = 0; } $record['failures'] = isset($record['failures']) ? $record['failures'] + 1 : 1; $message = ''; $is_blocked = false; if ($record['failures'] >= MAX_FAILURES) { $record['block_until'] = $now + (BLOCK_MINUTES * 60); $remaining = BLOCK_MINUTES; $message = "尝试次数过多,请在 {$remaining} 分钟后重试。"; $is_blocked = true; } $ip_data[$ip] = $record; ftruncate($fp, 0); rewind($fp); fwrite($fp, json_encode($ip_data)); flock($fp, LOCK_UN); fclose($fp); return array('is_blocked' => $is_blocked, 'message' => $message); } function handle_verification_request($user_ip) { $fail = .........完整代码请登录后点击上方下载按钮下载查看
网友评论0