开启应用的 WAF
Web 应用防火墙(Web Application Firewall)可以用于防御 SQL 注入、XSS 跨站脚本、Web 服务器漏洞、木马等常见攻击,保障网站的安全。
本文介绍如何在 OpenResty Edge 管理后台的应用中,通过页面规则开启 WAF。
第一步:进入页面规则
在应用内左侧导航栏中点击页面规则,进入规则列表页面。初始状态下列表为空,显示"暂时没有创建任何规则。"

点击右上角的新建规则按钮,打开规则配置面板。
第二步:配置 WAF 模块
在新建规则面板中,可以看到以下几个区域:启用条件、动作、WAF、代理、缓存 等。
WAF 模块默认处于关闭状态,点击右侧的开关将其开启:

WAF 规则集
WAF 模块内置了以下规则集:
| 规则集 | 说明 |
|---|---|
scanner_detection | 扫描器检测,识别并拦截常见的漏洞扫描工具和爬虫 |
protocol_enforcement | 协议规范,强制执行 HTTP 协议标准,拦截不合规的请求 |
protocol_attack | 协议攻击,防御 HTTP 请求走私、响应拆分等协议层攻击 |
application_attack_lfi | 本地文件包含(LFI),防止攻击者读取服务器本地敏感文件 |
application_attack_rfi | 远程文件包含(RFI),防止攻击者引入并执行远程恶意文件 |
application_attack_rce | 远程代码执行(RCE),拦截试图在服务器端执行任意命令的请求 |
application_attack_php | PHP 代码注入,防御针对 PHP 应用的代码注入攻击 |
application_attack_nodejs | Node.js 注入,防御针对 Node.js 应用的注入攻击 |
application_attack_xss | XSS 跨站脚本攻击,拦截恶意脚本注入请求 |
application_attack_sqli | SQL 注入攻击,防止攻击者通过构造 SQL 语句操控数据库 |
application_attack_session_fixation | 会话固定攻击,防止攻击者劫持用户会话 |
application_attack_java | Java 代码注入,防御针对 Java 应用的反序列化及代码注入攻击(如 Log4Shell) |
你也可以根据需要选择需要的规则集。此外,你还可以添加自定义规则集,以及配置 WAF 白名单,相关内容将单独说明。
偏执级别
偏执级别默认为 1。级别越高,检测规则越严格,但可能产生更多误报,需根据实际情况调整。
拦截动作
触发 WAF 规则后,可配置以下几种动作:

- 仅记录日志(默认):仅将命中记录到日志,不对请求做任何拦截或跳转。
- OpenResty Edge 网关服务验证码挑战 - 使用内置验证码:将终端重定向到验证码页面,填写正确验证码后,该终端在一定时间内的请求将被放行。
- OpenResty Edge 网关服务验证码挑战 - 使用 hCaptcha 验证码:与上一项类似,但使用 hCaptcha 进行验证。
- 拦截并返回 HTTP 403 状态码:直接拒绝请求,返回 403 状态码。
- 重定向:将请求重定向到指定的 URL。
- 返回页面模板:返回自定义的页面模板。
- 关闭连接:直接关闭 TCP 连接。
- 重定向验证:重定向到验证页面进行身份确认。
- JavaScript 挑战验证:通过 JavaScript 挑战验证请求来源是否为真实浏览器。
其他选项
- 跨请求模式:开启后,来自同一客户端的请求分数将在 60 秒内累计计算。注意,开启此模式后,无法为每个规则集单独设置阈值。
- 捕获响应体:开启后将捕获响应内容用于进一步分析。
第三步:配置启用条件(可选)
如需针对特定请求开启 WAF,可展开顶部的启用条件区域进行配置。例如,可以根据请求 URL 前缀、请求头、客户端 IP 等条件,有选择地对某些路径启用对应的 WAF 规则集。
若不设置条件,则该规则对所有请求生效。
管理多条 WAF 规则
你可以添加多条页面规则,为不同的请求路径配置不同的 WAF 规则集。
需要注意的是:若多条规则的条件存在重叠,排序靠后(后生效)的规则会覆盖前面的规则。可通过调整顺序按钮对规则进行排序,并使用检查规则功能验证规则配置的正确性。