忽略所有 url 參數以強化安全性。如何?

忽略所有 url 參數以強化安全性。如何?

任何將 NGINX 伺服器放到網路上並在access.log一周後查看它的人都會發現許多正在嘗試的 URL 漏洞。每一天,任何時間。

如果我拒絕任何和所有 url 參數又怎樣呢?如果每個查詢字串都被 NGINX 屏蔽,rewrite而 NGINX 將無法匹配任何未定義為rewrite自然返回 404 Not Found 的內容,該怎麼辦?

或按順序放置在這個始終存在的位置區塊內的一系列重寫?

location / {
  rewrite "^/api/v1/users/?$" /api/v1/Users.php last;
  rewrite "^/api/v1/users/(all|active|inactive)?$" /api/v1/Users.php?status=$1 last;
  rewrite "^/api/v1/users/(\d+)/?$" /api/v1/Users.php?userId=$1 last;
}

# URL Match examples...

http://localhost/api/v1/users
http://localhost/api/v1/users/

http://localhost/api/v1/users/all
http://localhost/api/v1/users/active
http://localhost/api/v1/users/inactive

http://localhost/api/v1/users/2001
http://localhost/api/v1/users/2002
http://localhost/api/v1/users/2003

有沒有辦法讓 NGINX 忽略 URL 參數?如果這是一個幼稚的問題,請隨時告訴我。也許我問錯問題了。

答案1

而是使用return而不是rewrite因為“重寫指令只能回傳代碼 301 或 302”。為此,location使用正規表示式建立一個來捕獲特定請求 uri。

如果您只想刪除所有這些請求,請返回http 狀態 444

例子:

server {
    # ...
    location ~* ^/api/v1/users/.*$ {
        return  444;
    }
}

相關內容