当前位置:首页 > 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

php实现waf功能

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"

用户代理检测

拦截恶意爬虫或扫描器:

php实现waf功能

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

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

vue实现桌面功能

vue实现桌面功能

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

vue实现账号注册功能

vue实现账号注册功能

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

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现队列

php实现队列

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