1、正規表達式比對:
符号 | 說明 |
---|---|
== | 等值的比較 |
~ | 與指定正規表達式模式比對,區分字元大小寫 |
~* | 與指定正規表達式模式比對,不區分字元大小寫 |
!~ | 與指定正規表達式模式不比對,區分字元大小寫 |
!~* | 與指定正規表達式模式不比對,不區分字元大小寫 |
2.檔案及目錄比對:
符号 | 說明 |
---|---|
-f ,!-f | 判斷指定路徑的檔案是否存在 |
-d, !-d | 判斷指定路徑的目錄是否存在 |
-e, !-e | 判斷指定路徑的檔案或目錄是否存在 |
-x, !-x | 判斷指定路徑的檔案是否存在且可執行 |
-r,!-r | 判斷指定路徑的檔案是否存在且可讀 |
-w,!-w | 判斷指定路徑的檔案是否存在且可寫 |
3.通過if語句判斷一個url請求中是否含有敏感字元,包含敏感字元則拒絕請求,否則請求正常通路。
nginx變量:
$server_addr :擷取伺服器ip
$request_uri : 擷取url請求
$arg_paramsName :擷取請求參數paramsName
$http_host :擷取用戶端host
$scheme :擷取http或https協定
nginx.conf配置:
server {
listen 8899;
server_name localhost;
location /{
#擷取url完整請求
set $URL $scheme://$http_host$request_uri;
#根據擷取的URL比對一些限制字元,滿足條件拒絕訪
#這裡以www字元為例,可自行修改
if ($URL ~ "www"){
echo "請求帶有敏感字元'www',拒絕通路!";
#重定向到百度
#rewrite ^/(.*) http://www.baidu.com/ permanent;
}
echo "正常通路,url=" $URL;
}
}
通路帶有www字元:curl http://127.0.0.1:8899/test?params=www.qq.com&code=1234&msg=helloworld
[[email protected] /]# curl http://127.0.0.1:8899/test?params=www.qq.com&code=1234&msg=helloworld
[1] 37147
[2] 37148
[[email protected] /]# 請求帶有敏感字元'www',拒絕通路!
通路不帶www字元:http://127.0.0.1:8899/test?params=w.qq.com&code=1234&msg=helloworld
[[email protected] /]# curl http://127.0.0.1:8899/test?params=w.qq.com&code=1234&msg=helloworld
[1] 37149
[2] 37150
[[email protected] /]# 正常通路,url= http://127.0.0.1:8899/test?params=w.qq.com
注:在nginx中不支援if else的多重判斷。