流程篇

WAFPHP的运行流程如下:

  1. 初始化WAFPHP,注册registershutdownfunction以及splautoloadregister
  2. 收集当前请求信息(IP、GET、POST、UA、Cookie、Host)已备后续流程处理使用
  3. 加载系统配置,根据配置加载相应的数据模型以及日志模块(记录系统开始运行时间及内存消耗)
  4. 检测当前请求session是否有效,无效则重新颁布系统自有session(此session不同于PHP原有session)
  5. 如果开启脚本检测则开始执行后续脚本检测流程,否则直接跳到步骤10
  6. 全局IP黑名单、UA黑名单检测,不通过则拦截此次请求(直接跳到步骤10)
  7. 全局IP白名单、UA白名单检测,通过则放行此次请求不再执行脚本检测(直接跳到步骤10)
  8. 根据系统配置装载待执行检测脚本
  9. 依次执行检测脚本,中间如果有脚本检测不通过则停止后续检测拦截此次请求(直接跳到步骤10)
  10. 退出系统,记录本次运行
  11. 清理系统所占资源退出系统(同时注销registershutdownfunction以及splautoloadregister,避免影响调用者原有代码)

配置篇

WAF_ON

脚本检测开关,关闭后将不执行脚本检测

DEBUG_LEVEL

debug等级,级别高于设定等级的日志信息将被记录。等级包括:DEBUG、INFO、WARN、ERROR,为空时关闭debug

日志目录:#your WAFPHP path#/Runtime/Logs/

  1. DEBUG,将会详细记录系统的运行耗时以及内存消耗
  2. INFO,将会输出系统运行的主要提示信息
  3. WARN,将会输出系统运行警告级别的错误信息
  4. ERROR,将会输出系统运行致命错误级别的错误信息
MODEL_TYPE

数据模型类型,目前已实现Redis以及Memcache两种。由于Redis支持更丰富的数据操作,因此建议使用Redis以获得更好的性能

WHITE_LIST_LIFETIME

全局白名单有效时间,全局白名单采用的是记录系统自有session,而系统自有session的有效时间为600s,因此白名单有效时间不应长于600s

BLACK_LIST_LIFETIME

全局黑名单有效时间

MODEL_CONFIG

数据模型的相关链接参数,其中password为Redis模式下需要auth验证时使用

BLACK_IP

黑名单IP,支持D段范围的方式以半角”-“分隔,例如:127.0.0.3-127.0.0.254

BLACK_UA

黑名单UA,支持正则表达式

BLACK_UAIGNORECASE

黑名单UA忽略大小写

WHITE_IP

白名单IP

WHITE_UA

白名单UA,UA的正则=>DNS反向解析匹配的正则

WHITE_UA_IGNORE_CASE

白名单UA忽略大小写

WHITE_UA_DNS_REVERSE

白名单UA开启DNS反向解析,开启后UA在白名单中的IP将进行DNS反向解析验证,验证的主机需匹配DNS反向解析正则,第一次响应耗时增加2、3s

SCRIPT_LIST

检测脚本列表,根据顺序执行脚本检测,true表示开启该脚本检测

WAFROBOTCONFIG

机器人检测脚本配置

WAFMYSQLCONFIG

防SQL注入脚本配置

WAFXSSCONFIG

防XSS注入脚本配置

WAFUPLOADCONFIG

防恶意文件上传脚本配置

模块篇

机器人挑战模块(用于防御频繁恶意非正常人为请求)

机器人挑战模块支持四种模式:JS挑战、英文验证码挑战、中文验证码挑战、工作量证明挑战

  1. JS挑战,系统将返回一段JS由客户端浏览器自动执行,当客户端无法执行JS时判定该请求为机器人请求
  2. 英文验证码挑战,系统将返回一个带有英文验证码的页面,用户手动输入验证码后验证验证码是否正确,不正确则判定该请求为机器人请求
  3. 中文验证码挑战,系统将返回一个带有中文验证码的页面,用户手动输入验证码后验证验证码是否正确,不正确则判定该请求为机器人请求
  4. 工作量证明挑战,此为JS挑战的升级版,在JS挑战的基础上增加了工作量证明(给定任意随机值,浏览器根据递增的方式拼接方式计算出SHA256符合自动要求的拼接值交由服务端验证)。

防SQL注入模块

开发中…

防XSS模块

开发中…

防恶意文件上传模块

开发中…

其他

可参考《WAFPHP高阶教程》自行扩展:here