上回讲到 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中的 fooin
  • $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为/barGET请求中参数名为foo的值中禁用拦截规则 #1000:

1
BasicRule wl:1000 "mz:$ARGS_VAR:foo|$URL:/bar";

所以, http://127.0.0.1/bar?foo=select * from a 不会被过滤。

4

在URL为/barGET请求中的参数禁用拦截规则 #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的核心规则中 拦截规则 的语法

除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

本文地址:https://blog.micblo.com/2015/07/19/NGINX%E7%9A%84WAF%E6%A8%A1%E5%9D%97-Naxsi-%E9%85%8D%E7%BD%AE%E7%99%BD%E5%90%8D%E5%8D%95-2/