流程篇
WAFPHP的运行流程如下:
- 初始化WAFPHP,注册registershutdownfunction以及splautoloadregister
- 收集当前请求信息(IP、GET、POST、UA、Cookie、Host)已备后续流程处理使用
- 加载系统配置,根据配置加载相应的数据模型以及日志模块(记录系统开始运行时间及内存消耗)
- 检测当前请求session是否有效,无效则重新颁布系统自有session(此session不同于PHP原有session)
- 如果开启脚本检测则开始执行后续脚本检测流程,否则直接跳到步骤10
- 全局IP黑名单、UA黑名单检测,不通过则拦截此次请求(直接跳到步骤10)
- 全局IP白名单、UA白名单检测,通过则放行此次请求不再执行脚本检测(直接跳到步骤10)
- 根据系统配置装载待执行检测脚本
- 依次执行检测脚本,中间如果有脚本检测不通过则停止后续检测拦截此次请求(直接跳到步骤10)
- 退出系统,记录本次运行
- 清理系统所占资源退出系统(同时注销registershutdownfunction以及splautoloadregister,避免影响调用者原有代码)
配置篇
WAF_ON
脚本检测开关,关闭后将不执行脚本检测
DEBUG_LEVEL
debug等级,级别高于设定等级的日志信息将被记录。等级包括:DEBUG、INFO、WARN、ERROR,为空时关闭debug
日志目录:#your WAFPHP path#/Runtime/Logs/
- DEBUG,将会详细记录系统的运行耗时以及内存消耗
- INFO,将会输出系统运行的主要提示信息
- WARN,将会输出系统运行警告级别的错误信息
- 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挑战、英文验证码挑战、中文验证码挑战、工作量证明挑战
- JS挑战,系统将返回一段JS由客户端浏览器自动执行,当客户端无法执行JS时判定该请求为机器人请求
- 英文验证码挑战,系统将返回一个带有英文验证码的页面,用户手动输入验证码后验证验证码是否正确,不正确则判定该请求为机器人请求
- 中文验证码挑战,系统将返回一个带有中文验证码的页面,用户手动输入验证码后验证验证码是否正确,不正确则判定该请求为机器人请求
- 工作量证明挑战,此为JS挑战的升级版,在JS挑战的基础上增加了工作量证明(给定任意随机值,浏览器根据递增的方式拼接方式计算出SHA256符合自动要求的拼接值交由服务端验证)。
防SQL注入模块
开发中…
防XSS模块
开发中…
防恶意文件上传模块
开发中…
其他
可参考《WAFPHP高阶教程》自行扩展:here
《 “WAFPHP进阶教程” 》 有 3 条评论
求 防SQL注入模块 防XSS模块 防恶意文件上传模块
最近在做这一块的基于大数据的检测系统,等完结之后我再做成模块放Github上。
[…] 【原文:WAFPHP进阶教程 MottoIN小编整理发布】 […]