NAXSI (Nginx Anti XSS & SQL Injection) 是一个开源的 Web 应用防火墙模块,用于 Nginx 服务器。白名单规则是 NAXSI 的核心功能之一,用于允许特定的请求模式通过防火墙检查。
NAXSI 白名单规则用于: - 允许已知安全的请求模式 - 减少误报(false positives) - 针对特定 URL 或参数放宽安全限制
基本格式:
BasicRule wl:ID [mz:[ARGS|URL|BODY|$VAR]|$SPECIFIC_VAR] [negative] [match] [rx];
参数说明:
- wl:ID
:要白名单的规则 ID (0-1000 是 NAXSI 内置规则)
- mz:
:匹配区域(请求的哪一部分)
- ARGS
:所有参数
- URL
:URL 路径
- BODY
:POST 数据
- $VAR
:特定变量名
- negative
:反向匹配(可选)
- match
:匹配模式(可选)
- rx
:使用正则表达式(可选)
BasicRule wl:1010;
BasicRule wl:0 "mz:$ARGS_VAR:username";
BasicRule wl:0 "mz:$URL:/api/v1/public";
BasicRule wl:0 "mz:$URL:/admin/*|$ARGS_VAR:token" "rx";
BasicRule wl:1005 "mz:$ARGS_VAR:query";
白名单规则通常放置在:
- Nginx 的 http
或 server
部分(全局白名单)
- location
块中(特定路径白名单)
BasicRule wl:1015 "mz:$ARGS_VAR:X-Requested-With|$HEADERS_VAR:X-Requested-With";
启用 naxsi.rules
调试模式查看哪些规则被触发:
LearningMode;
SecRulesEnabled;
DeniedUrl "/RequestDenied";
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
通过分析日志可以优化白名单规则,减少误报。