当前位置:首页 > 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();
    }
}

日志记录功能

记录可疑请求便于分析:

php实现waf功能

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
分享给朋友:

相关文章

vue实现桌面功能

vue实现桌面功能

Vue 实现桌面功能的方法 Vue.js 可以通过结合 Electron 或 NW.js 等框架实现桌面应用开发。以下是几种常见的方法: 使用 Vue 与 Electron 结合 Electron…

vue实现名字查找功能

vue实现名字查找功能

实现名字查找功能 在Vue中实现名字查找功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用v-model和computed属性 创建一个输入框,使用v-model绑定输入的值,通过comp…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

uniapp支付功能怎么实现

uniapp支付功能怎么实现

uniapp支付功能实现方法 准备工作 注册微信支付、支付宝等平台的开发者账号,获取必要的商户ID(mch_id)、API密钥(key)、应用ID(appid)等信息。确保项目已配置好相关支付SDK。…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…