nginx-naxsi白名單規則
阿新 • • 發佈:2019-01-05
白名單規則語法:
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";