目录

WAFPHP进阶教程

WAFPHP框架运行流程与配置详解

流程篇

WAFPHP的完整运行流程如下:

系统执行流程

  1. 初始化框架:注册shutdown_functionspl_autoload_register,确保框架资源能被正确清理
  2. 收集请求信息:获取客户端IP、GET/POST参数、User-Agent、Cookie、Host等关键信息
  3. 加载系统配置:根据配置初始化数据模型和日志模块,记录系统启动时间及内存消耗
  4. 会话验证:检查当前请求的系统自有session有效性(与PHP原生session无关)
  5. 检测开关判断:若WAF_ON为false,跳过后续脚本检测直接执行步骤10
  6. 黑名单检测:检查IP和UA是否在全局黑名单中,若在则拦截请求
  7. 白名单检测:检查IP和UA是否在全局白名单中,若在则放行请求,不再执行脚本检测
  8. 脚本加载:根据SCRIPT_LIST配置加载待执行的检测脚本
  9. 脚本执行:按顺序执行检测脚本,任一脚本失败即拦截请求
  10. 系统退出:记录本次请求的运行状态和性能数据
  11. 资源清理:注销shutdown_functionspl_autoload_register,释放框架资源

配置篇

核心配置项

WAF_ON

  • 功能:脚本检测总开关
  • 类型:布尔值
  • 默认值:true

DEBUG_LEVEL

  • 功能:调试日志级别
  • 有效值:DEBUG/INFO/WARN/ERROR
  • 日志路径#your WAFPHP path#/Runtime/Logs/
  • 级别说明
    • DEBUG:记录详细运行耗时和内存消耗
    • INFO:记录系统运行主要提示信息
    • WARN:记录系统警告级别错误
    • ERROR:记录系统致命错误

MODEL_TYPE

  • 功能:数据模型类型
  • 支持类型:Redis/Memcache
  • 推荐:Redis(支持更丰富的数据操作,性能更优)

WHITE_LIST_LIFETIME

  • 功能:全局白名单有效时间
  • 单位:秒
  • 限制:不应超过600秒(系统自有session有效时间)

BLACK_LIST_LIFETIME

  • 功能:全局黑名单有效时间
  • 单位:秒

MODEL_CONFIG

  • 功能:数据模型连接配置
  • 示例
    [
        'type' => 'redis',
        'host' => '127.0.0.1',
        'port' => 6379,
        'password' => 'your_redis_password',
        'database' => 0
    ]
    

黑白名单配置

配置项 说明 示例
BLACK_IP 黑名单IP,支持D段范围 127.0.0.3-127.0.0.254
BLACK_UA 黑名单User-Agent,支持正则 `/bot
BLACK_UA_IGNORE_CASE 黑名单UA是否忽略大小写 true
WHITE_IP 白名单IP 192.168.1.0/24
WHITE_UA 白名单UA,支持正则 /Chrome/i
WHITE_UA_IGNORE_CASE 白名单UA是否忽略大小写 true
WHITE_UA_DNS_REVERSE 白名单UA是否启用DNS反向解析 true

检测脚本配置

配置项 说明 示例
SCRIPT_LIST 检测脚本列表,true表示启用 ['robot' => true, 'mysql' => false]
WAF_ROBOT_CONFIG 机器人检测配置 配置详情见机器人挑战模块
WAF_MYSQL_CONFIG SQL注入防护配置 配置详情见防SQL注入模块
WAF_XSS_CONFIG XSS防护配置 配置详情见防XSS模块
WAF_UPLOAD_CONFIG 文件上传防护配置 配置详情见防恶意文件上传模块

模块篇

机器人挑战模块

WAFPHP的机器人挑战模块提供四种防御模式:

  1. JS挑战模式

    • 系统返回一段JS代码由客户端浏览器自动执行
    • 无法执行JS的请求(如爬虫)被判定为机器人请求
    • 优势:无用户体验影响,实时检测
  2. 英文验证码挑战

    • 返回包含英文验证码的页面
    • 用户需正确输入验证码
    • 优势:简单直观,适用于低流量场景
  3. 中文验证码挑战

    • 返回包含中文验证码的页面
    • 用户需正确输入验证码
    • 优势:更符合中文用户习惯
  4. 工作量证明挑战

    • 基于JS挑战的升级版
    • 增加SHA256工作量证明机制(参考比特币工作量证明
    • 客户端需计算出符合要求的SHA256值,由服务端验证
    • 优势:有效抵御自动化工具,提升安全性

防护模块状态

模块 状态 说明
机器人挑战 ✅ 已实现 提供4种挑战模式
防SQL注入 ⏳ 开发中 未完成,计划支持预编译检测
防XSS ⏳ 开发中 未完成,计划支持白名单过滤
防恶意文件上传 ⏳ 开发中 未完成,计划支持MIME类型验证

本文档为WAFPHP框架核心配置与运行流程的详细说明,如需扩展开发,请参考《WAFPHP高阶教程》。框架设计遵循"最小侵入、最大防护"原则,建议结合OWASP Top 10防护规范使用,可有效防御常见Web攻击。