hanyunwl
Ta 并不想说些什么。 • 9小时前

  简单的宝塔waf防火墙php代码

[]// waf.php

// 定义错误处理函数
function handleError($message, $statusCode = 403) {
http_response_code($statusCode);
echo "

Forbidden

$message

";
exit;
}

// 获取客户端IP
function getClientIP() {
if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP']) {
return $_SERVER['HTTP_CLIENT_IP'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']) {
// 处理可能存在的多个IP
$ipList = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
return trim($ipList[0]);
} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR']) {
return $_SERVER['REMOTE_ADDR'];
}
return 'UNKNOWN';
}

// 简单的速率限制
function rateLimit($ip, $limit = 100, $timeFrame = 60) {
$logFile = __DIR__ . '/waf_logs/' . $ip;
$currentTime = time();

// 创建日志目录
if (!is_dir(__DIR__ . '/waf_logs/')) {
mkdir(__DIR__ . '/waf_logs/', 0755, true);
}

// 清理过期的记录
if (file_exists($logFile)) {
$log = file_get_contents($logFile);
$logEntries = explode("\n", $log);
$filteredEntries = [];
foreach ($logEntries as $entry) {
if ($entry) {
list($timestamp) = explode('|', $entry);
if (($currentTime - $timestamp) < $timeFrame) {
$filteredEntries[] = $entry;
}
}
}
$log = implode("\n", $filteredEntries);
} else {
$log = '';
}

// 检查是否超过限制
if (substr_count($log, "\n") >= $limit) {
handleError('请求过于频繁,请稍后再试。');
}

// 记录当前请求
$log .= $currentTime . '|' . $currentTime . "\n";
file_put_contents($logFile, $log);
}

// 过滤恶意请求
function filterRequest() {
$clientIP = getClientIP();

// 速率限制
rateLimit($clientIP);

// 获取所有输入数据
$input = $_REQUEST;
foreach ($input as $key => $value) {
// 简单的SQL注入防护
if (preg_match('/\b(SELECT|INSERT|UPDATE|DELETE|DROP|TRUNCATE|UNION|EXEC)\b/i', $value)) {
handleError('检测到潜在的SQL注入攻击。');
}

// 简单的XSS防护
if (preg_match('/<script\b[^>]*>(.*?)<\/script>/is', $value)) {
handleError('检测到潜在的XSS攻击。');
}

// 其他防护规则可以在这里添加
}

// 过滤URL参数
foreach ($_GET as $key => $value) {
if (preg_match('/[\x00-\x1F\x7F<>"\'%;()&]/', $value)) {
handleError('检测到恶意输入。');
}
}

// 过滤POST参数
foreach ($_POST as $key => $value) {
if (preg_match('/[\x00-\x1F\x7F<>"\'%;()&]/', $value)) {
handleError('检测到恶意输入。');
}
}
}

// 调用防护函数
filterRequest();

// 如果没有触发防护规则,继续执行
?>[/]

拯救了 120 人的帖子
最新回复0
    • Xiuno插件网 - 超论
      1
免签约码支付 大圣云计算热门活动