1. 程式人生 > >nginx-naxsi白名單規則

nginx-naxsi白名單規則

白名單規則語法:

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為例:規則#1000是過濾包含select、update、delete、insert等SQL關鍵字的規則

規則 說明
BasicRule wl:1000; 在本子規則中完全禁用攔截規則#1000。因為沒有指定區域,所以全部加入白名單。
BasicRule wl:1000 "mz:$ARGS_VAR:foo";

在全部GET引數名為foo的值中禁用攔截規則#1000

類似http://mike.hi-linux.com/?foo=select * from demo這樣的請示就不會被過濾。

BasicRule wl:1000 "mz:$URL:/bar|ARGS";

在URL為/bar的GET請求中的引數禁用攔截規則#1000

以下類似請求,均不會過濾:

http://mike.hi-linux.com/bar?my=select * from demohttp://mike.hi-linux.com/bar?from=weibo

BasicRule wl:1000 "mz:ARGS|NAME";

在全部GET請求中對所有引數名(只是名,不包含引數值)中禁用攔截規則#1000

以下請求不會過濾:

http://mike.hi-linux.com/bar?from=weibo

以下請求會過濾:

http://mike.hi-linux.com/bar?foo=select

因為select屬於引數值,不在白名單範圍內。

BasicRule wl:0 "mz:$URL_X:^/upload/(.*).(.*)$|URL";

在全部請求中對符合^/upload/(.*).(.*)$正則規則的URL禁用全部攔截規則

類似http://mike.hi-linux.com/upload/select.db請求不會被過濾(原本會觸發#1000攔截規則)。

實戰用的白名單規則
# vi naxsi_BasicRule.conf
BasicRule wl:1010,1011 "mz:$ARGS_VAR:rd";
BasicRule wl:1015,1315 "mz:$HEADERS_VAR:cookie";