当前位置:首页 > PHP

php实现waf功能

2026-02-16 20:44:36PHP

PHP实现WAF(Web应用防火墙)功能

WAF用于保护Web应用免受常见攻击(如SQL注入、XSS等)。以下是基于PHP实现简易WAF的核心方法:

输入过滤与验证

对用户输入进行严格过滤,使用filter_var或自定义正则匹配:

$input = $_GET['user_input'];
$filtered_input = filter_var($input, FILTER_SANITIZE_STRING);

SQL注入防护

使用预处理语句替代直接拼接SQL,例如PDO方式:

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->bindParam(':id', $user_input, PDO::PARAM_INT);
$stmt->execute();

XSS防护

输出时对特殊字符进行转义,可使用htmlspecialchars

echo htmlspecialchars($user_content, ENT_QUOTES, 'UTF-8');

请求频率限制

防止暴力破解,记录IP请求次数:

$ip = $_SERVER['REMOTE_ADDR'];
$key = "rate_limit_$ip";
$current = apcu_fetch($key);
if ($current > 100) {
    header("HTTP/1.1 429 Too Many Requests");
    exit;
}
apcu_inc($key);

敏感函数禁用

php.ini中禁用危险函数:

disable_functions = "exec,passthru,shell_exec,system"

用户代理检测

拦截恶意爬虫或扫描器:

$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/sqlmap|nmap|wget|curl/i', $userAgent)) {
    header('HTTP/1.0 403 Forbidden');
    exit;
}

文件上传防护

检查文件类型和内容:

$allowed_types = ['image/jpeg', 'image/png'];
if (!in_array($_FILES['file']['type'], $allowed_types)) {
    die("Invalid file type");
}

正则规则匹配

定义常见攻击模式的正则规则库:

$patterns = [
    '/\bunion\b.+?\bselect\b/is',
    '/<script.*?>.*?<\/script>/is'
];
foreach ($patterns as $pattern) {
    if (preg_match($pattern, $input)) {
        log_attack();
        block_request();
    }
}

日志记录功能

记录可疑请求便于分析:

function log_attack() {
    $log = date('Y-m-d H:i:s') . " - Attack detected: " . $_SERVER['REQUEST_URI'];
    file_put_contents('/var/log/waf.log', $log.PHP_EOL, FILE_APPEND);
}

实现建议

  • 将WAF逻辑封装为独立类或中间件
  • 定期更新防护规则模式
  • 考虑使用成熟的开源方案(如ModSecurity)作为补充

以上方法需根据实际业务需求调整,建议配合服务器级WAF(如Cloudflare、NAXSI)使用。

php实现waf功能

标签: 功能php
分享给朋友:

相关文章

vue电影功能实现

vue电影功能实现

Vue电影功能实现 数据获取与展示 使用Axios或Fetch API从电影API获取数据,例如TMDB或豆瓣API。在Vue组件的created或mounted生命周期钩子中发起请求,将返回的电影数…

vue实现聊天功能

vue实现聊天功能

Vue实现聊天功能的方法 使用WebSocket实现实时通信 安装WebSocket客户端库如socket.io-client,在Vue组件中建立连接。创建一个消息列表和数据输入框,通过WebSock…

vue实现账号注册功能

vue实现账号注册功能

实现账号注册功能 在Vue中实现账号注册功能通常需要结合前端表单和后端API交互。以下是一个完整的实现方案: 创建注册表单组件 新建一个Register.vue组件,包含基本的注册表单字段: &l…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n!…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…