1. 项目概述与核心需求解析
1.1 AWD模式下的真实防守痛点
作为一个在AWD(Attack With Defense,攻防兼备)赛制里被反复暴打过、也成功防守过多次的老手,我太清楚这种模式的诡异之处了。看标题就知道,今天咱们聊的是AWD Watchbird这套专门为PHP环境设计的Web应用防火墙。它解决的不是普通生产环境的日常安全防御问题,而是在攻防演练赛这种极端场景下,如何活着保住服务器权限、保住flag、拖住对面攻击脚步的问题。
只要打过AWD,你一定会经历这种窒息操作:开场不到10分钟,大量同网段的扫描器就开始全端口探路;20分钟后,Web目录开始出现各种莫名其妙的小马,后台密码被爆破,业务接口被打成了筛子;扭头一看,隔壁队的服务器被人删库,剩下几个陪跑的C2都被传了蠕虫。整场演的基本就是谁先洞穿对方防线、谁先保住自家核心业务。而这个过程中,防守侧最核心的诉求只有一个:在尽量不影响业务状态的前提下,最大化地侦察、拦截、记录、反制进入Web应用的所有恶意流量。
传统的防护思路在平时够用,但在AWD赛场上基本是作死:
- 等厂商出补丁再修复?赛场不会给你这个时间。
- 在系统层跑云锁、安全狗这类重量级防护?规则更新慢、误报率高,而且一旦被对面优先打穿内网,你再厚的系统层也形同虚设。
- 手动回滚文件、不断改代码?开局的前两个小时,你能盯住自己三个文件就算厉害,更别说还要去分析别人的攻击流量。
所以AWD赛圈里慢慢沉淀出一个共识:与其靠堆补丁和运气,不如在最底层把请求拦下来,以流量检测为核心做一套动态的实时防护体系。而Watchbird这类项目,就是顺着这个思路做出来的。它本质上是把WAF能力以轻量、可控、可审计的方式注入到PHP应用层,和你的业务代码跑在一起,用最直接的方式在请求模型里做拦截和记录。
1.2 项目定位与适用人群
看标题里的“最终部署指南”这几个字,说明这个项目不是让你研究算法,而是要你落地的。那么AWD Watchbird到底适合哪些人?
先说最直接的:每一个需要参加AWD攻防演练赛的选手。不管是校招生、职场新人还是队伍里的防守主力,只要你需要在比赛中维护一台跑PHP业务的靶机,用这套东西做一层区域防守,绝对是性价比很高的选择。它不需要你有多么深厚的PHP内核功底,只要会配配置、能读懂简单日志,就能在开赛前把整套防护体系拉起来。
其次,适合那些做红蓝对抗模拟、企业内部攻防演练、或者承接安全竞赛裁判与场地部署的工作人员。这类人需要快速给靶标环境加上统一安全策略,Watchbird这种以“部署简便、规则强管控”为核心的方案,也很适合用来构建标准化防护基线。
但要注意,它不是万能的。别指望装了Watchbird就天下无敌,它防不住的是网络链路层的注入,防不住到内核态的攻击,也不适合当成生产环境的WAF去承载复杂业务逻辑。它就是一个为了“PHP应用 + 攻防对抗场景”量身定做的特种防护工具。精准定位、定向使用,你才能感受到它的价值。
2. 核心特性与原理拆解
2.1 动态污点追踪 vs 传统关键字黑名单
看项目标题时,我第一反应是:这不就是个PHP写的WAF吗?但你仔细去扒它设计思路的话,会发现事情没那么简单。Watchbird和那些只会跑正则、匹配关键字的传统WAF有一个很本质的区别,它在架构层面引入了动态污点追踪的概念。
传统WAF拦截SQL注入,靠的是在请求入口处看有没有union select、information_schema这种特征。这套玩法有个致命的缺陷:攻击者稍微用注释符切分、内联注释、URL编码嵌套、二次编码,就能轻松绕过。你在前面拦了,他换个编码就进来;你把规则加严了,误报率又飙升,自己的正常业务先挂了。
而Watchbird做的污点追踪,是在PHP脚本执行的底层逻辑上做文章。它把外部传入的请求参数(也就是所有$_GET、$_POST、$_REQUEST、$_COOKIE、$_FILES里的值)统一标记为“不可信污点数据”,然后一路追踪这些数据在代码里的流动路径。一旦发现污点数据流入了高危函数(比如SQL查询的拼接、命令执行函数、文件操作函数、文件包含函数),就在执行前阻断,并且记录完整的调用栈、参数快照和流量来源。
这套思路其实借鉴了静态分析里的数据流分析,只不过把它做成了动态的、在运行时监控的版本。好处显而易见:恶意流量不再靠特征库碰运气,而是严格按照“数据从外部流入 → 未净化 → 进入危险点”这个因果关系来判定。攻击者可以绕过一个正则,但他绕不过参数在代码里流动的事实。
2.2 钩子机制解析:不修改业务代码的优雅注入
核心问题来了:怎么样才能在“不改动业务源码”的情况下实现污点追踪?
Watchbird给的是一个非常实用的工程解:基于Auto_prepend_file自动预加载机制的全局钩子注入。PHP本身支持在每次脚本执行之前先自动加载一个指定文件,通过auto_prepend_file配置项,你可以把拦截逻辑挂到每个PHP请求的头部,这就相当于在所有业务入口前立了一道哨卡。
更妙的是,这道钩子不只是做一次入口检查,它还能利用PHP反射、自定义错误处理、变量重写等手段,在请求生命周期内持续感知敏感操作。实际使用中,你完全可以把钩子文件放到项目目录之外或者专门保护好的目录里,配合只读权限,极大降低攻击者直接改你WAF脚本的可能性。既然钩子文件不被业务代码引用,也不在Web目录里暴露,那对面想定位和绕过它就得费一番功夫。
钩子机制的执行时序大概是这样的:
- PHP收到HTTP请求,初始化生命周期。
- 首先加载
auto_prepend_file指定的防护引导文件。 - 引导文件完成初始化:加载规则库、启用记录器、建立污点标记环境。
- 业务代码正式开始执行,所有外部参数都会被防护层拦截检查。
- 当某个操作触发了规则匹配,防护层根据预设动作执行阻断或记录。
- 脚本执行结束后,记录器批量写入日志文件。
关键在于:整个流程对业务代码完全透明,业务层的开发人员不需要感知WAF的存在。这就是它和改造性安全SDK最大的不同。
2.3 核心特性速览
为了让你对这套东西有一个直观印象,我把项目里比较核心的能力整理成了一个简表:
| 功能模块 | 能力描述 | 实战价值 |
|---|---|---|
| 请求参数检测 | 对GET/POST/Cookie/Header/Raw Body做全量检测 | 可以覆盖常见Web攻击面,包括SQL注入、XSS、文件包含、命令注入等 |
| 污点追踪引擎 | 跟踪外部数据向高危函数流动的路径 | 可以看到攻击的真实落点,而不只是在入口拦一下 |
| 文件级篡改监控 | 监控目录内文件hash变化 | 能第一时间发现对方种马、改文件的行为,方便回滚和溯源 |
| 命令执行追踪 | 对system、exec、shell_exec等函数做调用监控 | 防止对方拿到Webshell之后用命令执行做横向 |
| 请求日志 | 全量记录带有时间戳、IP、UA、请求体的访问日志 | 为赛后复盘、攻击者画像提供一手数据 |
| 动态封禁 | 根据触发规则自动封禁来源IP | 减少手动操作,在对方批量扫的时候非常有用 |
| 多模式运行 | 可选择监控模式、拦截模式、纯记录模式 | 方便前期观察、中期拦截、后期取证 |
2.4 部署形态对比
既然你能看到这篇指南,大概率已经在纠结:是直接在业务目录里丢脚本,还是做一层独立的中间件网关?Watchbird这类项目给出的默认答案是嵌入式软WAF形态。它不是一个独立的代理进程,而是以PHP扩展或者预加载脚本的方式存在于应用层内部,和业务代码共享一个运行时。
这种形态的取舍逻辑很现实:
- 优点:部署成本极低,不需要额外运维一套流量转发设备,不需要改网络架构,对系统和容器环境几乎是零侵入。
- 优点:检测精度高,可以拿到PHP语法树层面的信息,而不只是流量的表面特征。
- 缺点:占用的资源肯定比纯网络层WAF高一点,毕竟每个请求都要多跑一段检测逻辑。
- 缺点:如果被攻陷到进程层面,WAF本身也存在被绕过的风险。
了解这些前置条件之后,接下来的实操部分你才能明白每个步骤的来龙去脉,而不是机械地执行命令。
3. 部署实操与核心配置
3.1 环境准备和目录规划
开始动工之前,先把配置环境理清楚。Watchbird这类工具通常需要你有一台能跑PHP的服务器或容器。无论你是在云端租的靶机,还是本地搭的虚拟机,都建议先确认这几个组件可不可用:
- PHP版本:建议 7.2 以上,越新越好,因为要用到一些反射和语法特性。
- PHP CLI模式:用于运行初始化脚本和自检命令。
- Web服务:以Apache或Nginx为主,需要支持PHP-FPM。
- 写权限:项目配置、日志目录、临时目录需要可写。
接下来是目录规划。项目本身的目录布局不建议和你的业务代码混在同一个Web根目录里,否则攻击者直接访问WAF的文件路径就可能定位到它。更稳妥的方案是把WAF本体放在Web根目录外,比如/opt/awd-watchbird/,然后通过auto_prepend_file指定加载路径。
/opt/awd-watchbird/ |-- conf/ | `-- rules.php # 规则配置文件 |-- core/ | |-- bootstrap.php # 核心引导文件 | |-- detector.php # 污点检测引擎 | |-- logger.php # 日志记录模块 | `-- response.php # 响应与拦截动作模块 |-- logs/ | `-- watchbird.log # 运行时日志 `-- tools/ |-- selfcheck.php # 自检工具 `-- watcher.php # 文件监控辅助脚本注意,这不一定是绝对的官方结构,但按照这个思路去组织代码,后续每一处修改你都找得到地方。
3.2 初始化加载配置
接下来要做的,是把PHP的auto_prepend_file指向核心引导文件。如果你用的是PHP-FPM,在php.ini里找到对应的配置项:
auto_prepend_file = /opt/awd-watchbird/core/bootstrap.php如果环境对php.ini的修改权限有限制,可以在Apache的.htaccess里加:
php_value auto_prepend_file "/opt/awd-watchbird/core/bootstrap.php"如果是Nginx + PHP-FPM环境,则在server块里加上:
fastcgi_param PHP_VALUE "auto_prepend_file=/opt/awd-watchbird/core/bootstrap.php";配置完之后重启PHP-FPM再加载。验证是否生效的方法很简单:写一个只有<?php phpinfo(); ?>的探针文件,看到auto_prepend_file的值为刚才设置的路径,就说明成功了。
3.3 规则集初始配置
默认规则集里一般会包含以下这些检测类别:
| 规则类别 | 检测内容 | 危险函数示例 |
|---|---|---|
| SQL注入 | 检测拼接SQL语言特征的输入 | mysqli_query、PDO::query、sqlite_query |
| 命令注入 | 检测shell元字符和命令拼接 | system、exec、shell_exec、passthru |
| 文件包含 | 检测路径穿越和PHP流包装器 | include、require、file_get_contents |
| XSS | 检测脚本标签与事件处理器 | echo、print、sprintf |
| 代码执行 | 检测动态代码评估特征 | eval、assert、preg_replace配合/e修饰符 |
| 文件上传 | 检测危险扩展名与内容头 | move_uploaded_file配合危险后缀 |
初次部署时,可以先以监控模式运作,把规则命中都记录而不阻断。这样做的目的是观察哪些是正常业务触发的误报,哪些才是真正的攻击流量。通过一两轮实际流量打磨后,再切到拦截模式,误报率就会大幅下降。
3.4 配置示例
以下是一个典型的规则配置文件示例(简化):
return [ 'mode' => 'monitor', // monitor | intercept | silent 'log_file' => '/opt/awd-watchbird/logs/watchbird.log', 'rules' => [ 'sql_injection' => [ 'enabled' => true, 'danger_functions' => ['mysqli_query', 'PDO::query', 'pg_exec'], 'score_threshold' => 3, ], 'command_injection' => [ 'enabled' => true, 'danger_functions' => ['system', 'exec', 'shell_exec', 'proc_open'], 'score_threshold' => 2, ], 'file_include' => [ 'enabled' => true, 'danger_functions' => ['include', 'include_once', 'require', 'require_once'], 'blocked_patterns' => ['php://', 'file://', '../', '..\\'], ], ], 'ip_blacklist' => [], 'whitelist' => [ 'paths' => ['/healthcheck', '/api/public'], 'ips' => ['127.0.0.1'], ], ];模式字段的意义:
monitor:只记录命中与告警,不拦截,适合前期观察和规则调优。intercept:命中后直接阻断请求并返回默认错误页,适合比赛中期策略收紧。silent:命中后不仅拦截,还不返回错误提示,而是给一个伪造的正常响应,让攻击者摸不着头脑,降低被针对的可能。
我自己的习惯是:开赛前用monitor收集信息,前30分钟快速分析攻击方向,随后切到intercept,等防线稳定后对重点攻击源单独封禁。
3.5 部署中的注意事项
有一种常见问题:某些老靶场用的PHP 5.6或者HHVM,这类工具支持度会比较差,不少新语法跑不起来,所以有条件的话尽可能升级环境,或者在部署前至少验证核心引导文件能不能正常加载。
还有一点必须强调:auto_prepend_file的路径一定不要放在Web根目录内可访问的位置。如果根目录在/var/www/html/,而你把引导文件也丢在/var/www/html/awd/,那别人直接访问/awd/bootstrap.php就能看到源码。放在Web根目录之外,配合低权限运行用户,能让攻击者定位和篡改WAF的难度增大很多。
另外,日志目录也要单独设置权限,不要让业务用户可写,否则一旦攻击者上传了脚本,第一件事就是删日志、清理痕迹,把你的溯源线索全部抹掉。
4. 实操过程与核心功能详解
4.1 模拟攻击与验证防护
部署完成之后,不能只是喝口水等比赛开始。我的习惯是先自己打一遍靶机,验证防护是否真的生效。
第一步,先构造一条简单的SQL注入请求:
GET /index.php?id=1%27%20UNION%20SELECT%201,2,3,database(),5%20FROM%20information_schema.tables%20--+这条请求如果直接打在未防护的业务上,大概率能被注入点吃进去。但Watchbird拦截模式下,你会收到一条阻断记录,包含命中的规则类别、攻击负载、来源IP以及触发的高危函数调用栈。
第二步,验证文件包含的拦截:
GET /index.php?page=../../../../etc/passwd同样,拦截模式下这条请求会被直接拒绝,而且日志里会明确告诉你,page参数的值触发了文件包含规则。
第三步,验证命令注入的监控:
GET /ping.php?ip=127.0.0.1%3Bcat%20/etc/passwd如果你把ping.php这个存在命令拼接漏洞的文件也纳入了检测范围,那么这次请求会在进入命令执行函数之前被拦下。
这种“自攻自防”的验证方式非常有用:一方面能确认WAF真的在你的环境里跑起来了,另一方面也让你熟悉日志的输出格式和告警结构,不至于在赛事开打的时候才临时抱佛脚。
4.2 读写文件与Webshell行为监控
AWD里最骚的操作永远不是直接打注入,而是通过任意文件上传、文件写入漏洞种shell。Watchbird对文件类行为也做了监控:
- 检测
file_put_contents、fwrite、fopen以写模式打开的文件路径。 - 检测上传文件的后缀名,对
php、phtml、php3、php5、pht这类可执行后缀做重点标记。 - 结合高权限与低权限目录判断:如果在只读目录里出现写入行为,基本可以断定有人尝试种马。
- 联动规则引擎,如果写入内容里包含
eval、base64_decode、assert、system等危险调用,直接拉高危险等级。
这个功能不只是做拦截,更重要的作用是记录攻击者的种马惯用手法。你通过日志看到他写了什么文件、用什么参数、访问了哪个路径,赛后总结时都是宝贵的情报。
4.3 动态信息收集与攻击指纹提取
AWD中防守方的核心优势之一就是情报。你在流量层能看到所有进入靶机的恶意请求,这本身就构成了一套完整的情报搜集系统。
把这些请求的源IP、攻击路径、使用的Payload、尝试写入的文件路径组合起来,你就能对每一个攻击者做行为画像。比如某个IP特别喜欢打/admin/login.php,另一个IP总对着上传接口狂轰滥炸,这就是他们的攻击习惯和武器库偏好。在防守方共享情报时,这些东西非常有价值。
配合源IP封禁功能,你可以把自己靶机临时做成“简易蜜罐”:对特定IP投放假页面,同时在Watchbird的监控日志里持续记录其攻击手法,解析出工具特征。这套操作玩熟了之后,你在AWD里就不只是被动挨打,还能主动给对面设局。
4.4 规则增删与自定义检测
内置规则集永远不可能覆盖所有攻击手法,尤其是在赛题出得比较偏门的时候。我需要掌握如何写自定义规则。
假设你发现某个业务接口的查询参数存在二次编码绕过,内置规则拦不住。那就可以写一条自定义规则,针对该参数做两次解码后再匹配:
'custom_rules' => [ 'double_encode_sql' => [ 'param' => ['id', 'order'], 'decode_method' => 'urldecode_twice', 'pattern' => '/union\s+select|information_schema/i', 'action' => 'block', ], ],这种自定义规则的好处是灵活,坏处是如果写得太严可能会出现误拦。建议自定义规则一律先在监控模式下观察一段时间,确认影响面再去拦截。
4.5 运行时更新不需要重启服务
还有一个人性化的功能,就是规则热加载。由于配置文件以PHP数组方式存盘,每次执行检测前都会读取,所以你改规则时不需要重启PHP-FPM,也不需要重新拉起Docker容器。只要修改配置项并确保语法正确,下个请求就会自动使用新规则。
那改坏了怎么办?把配置改成一个语法错误的PHP文件,会导致每次请求都返回500。这就是为什么每次修改之后,建议先执行一次自检工具:
php /opt/awd-watchbird/tools/selfcheck.php这个脚本会检查配置文件的语法、目录可写性、关键模块是否存在。自检通过后,再放真实流量测试。
5. 常见问题与排查技巧实录
5.1 拦截功能没生效是怎么回事
这是最常被问到的情况,没有之一。明明规则开了拦截模式,日志里也看见命中记录了,但请求还是能正常通过,业务返回了200。出现这种情况,优先往这几个方向排查:
- PHP缓存:如果开了OPcache,并且配置了
opcache.enable,引导文件可能被缓存成旧版本,修改不生效。需要清理缓存。 - 多入口问题:如果业务代码有多个入口文件,但只有部分入口被预加载,其他入口自然就漏了。要把所有入口都纳入
auto_prepend_file范围。 - 函数禁用:有些环境会把
parse_str、extract这类函数禁用,导致引导文件执行一半就失败。打开错误日志看看有没有致命错误。 - CLI模式下测试:CLI模式和Web模式加载的配置不同,如果你只在CLI里测试,可能测试的是假环境。应该在Web访问层做验证。
5.2 误报率高导致正常业务全崩了
这是监控模式转拦截模式时最痛苦的阶段。某一次请求把正常登录操作给拦了,可能因为用户传递了一个包含select的普通文本。这时先别急,按以下步骤走:
先在日志中确认命中的规则类别。如果是SQL注入规则误报,那就是规则的正则太宽泛,把普通文本当成了SQL特征。解法是给这个路径加白名单,或者缩小检测参数的覆盖面。
'whitelist' => [ 'paths' => ['/login', '/api/register'], 'params' => ['content', 'text'], ],加完白名单之后重新跑一次流程,确认不再误拦。注意白名单不是越宽越好,过于宽泛会让攻击者利用白名单绕过。
5.3 性能损耗怎么评估与控制
嵌入式WAF的性能损耗永远不是零。在正式开赛前,一定要压一把:
用工具ab或者wrk打一轮基线QPS,开启Watchbird后,再打一轮,对比两者的吞吐差。常见情况是:开启检测后QPS下降20%~30%是可接受范围,但如果你开着大量正则循环、记录了全量请求体,性能下滑会非常明显。
性能优化思路:
- 只在必要时检测敏感参数,不要对每个请求做全量正则遍历。
- 把命中次数少的规则放到规则列表尾部。
- 日志写入改为批量写入,减少磁盘IO次数。
- 开启实时封禁,让恶意IP不再消耗检测资源。
- 比赛后半段防御压力变小时,可以动态降低检测深度。
5.4 如何绕过脏数据带来的死循环
有一类极端情况是攻击者发送超大体积的请求体,导致检测引擎在正则匹配时直接耗尽内存或CPU。这种问题需要在入口层先做体积限定,超过限制直接抛错或者跳过深层检测,保持基础防护在线。
除此之外,建议把PHP的max_execution_time调低到合理范围,不至于让单请求拖垮整个服务。
6. 从部署到反制:赛场经验补完
6.1 用好日志做防守反击
日志从来不只是用来查问题的,它更是防守反击的信息中枢。每一条恶意记录都对应着一台攻击者的机器,你可以把攻击数据拉出来,汇总IP、时间、攻击路径、Payload内容,形成一张“攻击热力表”。哪类攻击最多、哪个窗口最危险、哪个业务面最脆弱,一目了然。
有了这张表,战术就很清晰了:
- 重点防守薄弱业务面,临时加固或回滚代码。
- 对高频攻击IP做动态封禁。
- 如果赛事允许,把分析出的攻击工具指纹同步给友军。
6.2 多维联动构建纵深防御
不要只依赖一套WAF活命。我的标准开局流程是:
- 先把Watchbird的拦截模式开启,保证基础防线在线。
- 同时启动文件完整性监控,对Web根目录做hash基线。
- 业务层面把弱口令、默认后台全部改掉。
- 关闭不必要的目录列表和错误信息回显。
- 把可疑进程和网络连接列入重点排查清单。
WAF、文件监控、主机排查、账号清理,四层一起跑,才能形成层层设防的效果。单独任何一层都有可能会被秒穿,但合在一起就有纵深优势了。
6.3 时间窗口与防御节奏
AWD的赛事节奏非常有规律。开局前30分钟,大家都在扫描、踩点、种马;中盘是攻防最激烈的时候,到处都在拼漏洞利用的熟练度和速度;尾盘则会进入收割态势,人员疲惫加上攻防套路固化,容易产生松懈。所以防守策略我习惯采用“三段式节奏”:
- 前30分钟以监控为主,快速收集攻击方式。
- 中盘切拦截模式,同时高频检查文件变化。
- 尾盘保持拦截、封禁自动化,集中精力做日志总结和防守情报交换。
6.4 值得深挖的扩展方向
如果你和我一样属于那种啥都爱折腾一下的选手,建议在基础部署完成后,再往这几个方向挖一挖:
- 与定时任务联动:每隔几分钟自动解析日志中的高频攻击IP,并把封禁规则下发到防火墙层。
- 与彩虹表联动:如果你收集到的Payload足够多,可以尝试提取攻击者使用的字典,用于反制或预测下一步攻击。
- 与备份联动:一旦检测到核心文件被篡改,自动从备份中恢复,并在恢复后打上临时补丁。
- 与告警联动:把拦截日志实时推送到你的沟通群或自动化平台,方便在比赛状态中随时掌握防线动态。
我试过把Watchbird的日志对接进自建的消息通知服务,那场模拟对抗里,我能一边喝着水一边看着对面脚本扫到我这边然后被封禁的实时消息流,体验相当安心。
6.5 赛后复盘就是最有价值的一环
比赛结束不等于所有工作结束。如果是我,会第一时间导出Watchbird的完整日志,按照攻击类型、攻击IP、攻击时段三个维度做一次全面的复盘分析。这不只是为了写报告,更关键的是搞清楚一件事:在整场比赛里,真正能对我造成威胁的攻击手段是什么。
从日志里你会看到,有些攻击像例行公事一样到处撞,完全不值一提;有些攻击则精准地打在你脆弱业务线的核心逻辑上,不出手则已,出手就要命。赛后复盘的结论,就是你下一次部署这套防护体系时候的优化方向:规则要不要细化,白名单要不要收紧,哪个模块的检测深度还可以加强。
毕竟AWD这个游戏,本质上就是攻防双方不断升级打怪、互相学习的过程,你能从日志里读出的东西越多,下一次胜算就越大。
7. 部署Checklist速查
为了方便你进场前对照检查,我给你整一个自检表。开赛前花五分钟过一遍,心里有谱,上场不慌:
| 检查项 | 完成状态 |
|---|---|
| 确认PHP版本及可用扩展 | 建议7.2+ |
| 确认auto_prepend_file指向正确 | 路径不可在Web根目录内 |
| 规则集文件语法验证通过 | 用selfcheck脚本 |
| 日志目录可写且权限合适 | 建议隐藏于Web根目录外 |
| 监控模式运行并采集过至少100条请求 | 足够覆盖正常业务流量特征 |
| 自定义规则在监控模式下验证无副作用 | 完成后再切换拦截模式 |
| 白名单配置能匹配业务核心路径 | 避免赛时临时调优手忙脚乱 |
| 文件变更监控已建立基线 | 核心源码目录做hash快照 |
| 已进行过一轮自攻自防测试 | 确认SQL注入、文件包含拦截有效 |
| 备好封禁脚本和日志导出命令 | 避免在赛事状态下手忙脚乱 |
各人偏好不同,但如果你对AWD防守还比较生疏,把这份清单过一遍,至少能保证不会出现“开赛十分钟才发现WAF压根没跑起来”的尴尬局面。
最后再分享一个我个人的小习惯:部署时顺手把日志目录做一次软链,映射到一个更好记的路径,再配置个简单的归档脚本。这样比赛结束时压缩日志、写赛后总结都会省力不少。工具这东西,用熟了你就会发现,它真正帮你省下来的,不只是某个回合的防守,更是整条时间线上从容应对的心力。