NGINX的WAF模块-Naxsi 配置白名单 (2)
上回讲到 Naxsi的 简介和安装 ,这回我们主要讲的是 配置白名单 的方法和技巧。
配置白名单
如果你的服务器安装的是Wordpress或者ruTorrent或者dokuwiki或者drupal,可以直接在 naxsi-rules 下面找到 Naxsi官方 制作的白名单哦~~
如果都没有找到适合的白名单,就只能自己去配置白名单了(/(ㄒoㄒ)/~~ 好桑心)。下面会讲白名单的基础规则的语法哦。
基础规则(BasicRule) 是用来创建白名单的记录。它的语法是
1 | BasicRule wl:ID [negative] [mz:[$URL:target_url]|[match_zone]|[$ARGS_VAR:varname]|[$BODY_VARS:varname]|[$HEADERS_VAR:varname]|[NAME]] |
wl:ID (White List ID)
哪些拦截规则会进入白名单. 正确的语法是 :
- wl:0 : 把所有拦截规则加入白名单
- wl:42 : 把ID为42的拦截规则加入白名单
- wl:42,41,43 : 把ID为42, 41 和 43的拦截规则加入白名单
- wl:-42 : 把所有拦截规则加入白名单,除了ID为42的拦截规则
mz: (Match Zones)
指定的区域会生效本条白名单:
- ARGS:
GET
的整个参数,如:foo=bar&in=%20
- $ARGS_VAR:
GET
参数的参数名, 如foo=bar&in=%20
中的foo
和in
。 - $ARGS_VAR_X: 正则匹配的
GET
参数的参数名 - HEADERS: 整个HTTP协议头
- $HEADERS_VAR: HTTP协议头的名字
- $HEADERS_VAR_X: 正则匹配的HTTP协议头的名字
- BODY:
POST
的整个参数内容 - $BODY_VAR:
POST
参数的参数名 - $BODY_VAR_X: 正则匹配的
POST
参数的参数名 - URL: URL(
?
前的) - $URL_X: 正则匹配的URL(
?
前的) - FILE_EXT: 文件名 (
POST
上传文件时上传的文件名)
例子
已知拦截规则
#1000
是过滤包含select|union|update|delete|insert|table|from|ascii|hex|unhex
之类SQL关键字的规则
1
在本子规则中完全禁用拦截规则 #1000
。==因为没有指定区域,所以全部加入白名单。==
1 | BasicRule wl:1000; |
2
在全部GET
参数名为foo
的值中禁用拦截规则 #1000
(即不用#1000
规则检查GET
中参数名为foo
中的值):
1 | BasicRule wl:1000 "mz:$ARGS_VAR:foo"; |
所以, http://127.0.0.1/?foo=select * from a
不会被过滤。
3
在URL为/bar
的GET
请求中参数名为foo
的值中禁用拦截规则 #1000
:
1 | BasicRule wl:1000 "mz:$ARGS_VAR:foo|$URL:/bar"; |
所以, http://127.0.0.1/bar?foo=select * from a
不会被过滤。
4
在URL为/bar
的GET
请求中的参数禁用拦截规则 #1000
:
1 | BasicRule wl:1000 "mz:$URL:/bar|ARGS"; |
所以, http://127.0.0.1/bar?my=select * from a
不会被过滤。http://127.0.0.1/bar?from=weibo
也不会被过滤。
5
在全部GET
请求中对**所有参数名(只是名,不包含参数值)**中禁用拦截规则 #1000
:
1 | BasicRule wl:1000 "mz:ARGS|NAME"; |
所以, http://127.0.0.1/bar?from=weibo
不会被过滤。
但是, http://127.0.0.1/bar?foo=select
会被过滤(因为 select
属于参数值,不在白名单范围内)。
6
在全部请求中对符合^/upload/(.*)\.(.*)$
正则规则的URL禁用全部拦截规则:
1 | BasicRule wl:0 "mz:$URL_X:^/upload/(.*)\.(.*)$|URL"; |
所以, http://127.0.0.1/upload/select.db
不会被过滤 (原本会触发 #1000
拦截规则)。
ASP.NET常用白名单
ASP.NET简直受够了,下面总结几个常见的会触发WAF但是理论上没有安全隐患的白名单规则。
1
1 | BasicRule wl:2; # request too big |
原因: __viewstate
太大了,会导致请求太大。因为一般这个是防御Apache请求超长导致的漏洞的,所以可以给#2
加入白名单。
2
1 | BasicRule wl:0 "mz:$BODY_VAR:__viewstate"; |
原因: 现在看到这个就头痛。经常性触发各种规则。但是一定要注意,ASPX开发人员要过滤直接在__viewstate
中取得的数据。
3
1 | BasicRule wl:16; # Empty POST |
原因: 有特殊情况 POST
没有传数据,会触发这个规则。建议设计时都带上data,避免触发该规则。
下一节将会讲Naxsi的核心规则中 拦截规则 的语法。
除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。