Nginx作為一款高效能的Web伺服器和反向代理伺服器,廣受網站架構師的青睞。但在使用Nginx時,我們也需要注意安全方面的問題,特別是在處理URL。
由於Nginx的彈性,如果我們不採取一些URL安全性策略,就可能受到以下攻擊:
#本文將介紹Nginx URL安全策略編寫的指南。
一. 前置條件
在編寫Nginx URL安全策略之前,需要對以下知識點掌握:
二. 輸入過濾
Nginx可使用http請求頭偵測,防止惡意Http請求。具體實作方式是新增類似如下配置到Nginx設定檔:
if ($http_user_agent ~* "some evil expression") { return 403; }
或使用Nginx內建的防火牆模組進行輸入過濾,如下:
# block ip sends more than 100 requests per 5 seconds limit_conn_zone $binary_remote_addr zone=one:10m; limit_req_zone $binary_remote_addr zone=two:10m rate=1r/s; server { location / { limit_conn one 10; limit_req zone=two burst=5 nodelay; } }
該範例做瞭如下的事情:
三. 防SQL注入
在實際開發中,避免SQL注入是必須的。為了防止SQL注入攻擊,我們可以如下配置:
location ~* (.php|.asp|.ashx)/?$ { if ($args ~* "select.*from") { return 403; } }
該範例用到了Nginx內建的if模組,防止攻擊者使用select語句從資料庫中獲取數據,如果有這種情況,返回403禁止訪問。
四. 防XSS攻擊
針對XSS攻擊,我們可以加強對輸入的偵測。如果偵測到可能的XSS攻擊,可以將連線重新導向到一個安全的URL,或傳回錯誤訊息。
if ($args ~* "<script.*>") { return 403; }
此範例採用了Nginx內建的if模組,偵測URL中是否有嵌套了script標籤的內容。
五. 防CSRF攻擊
在使用Nginx時,為了防止CSRF攻擊,需要禁止外部網站的請求。例如,可以增加以下配置:
location / { if ($http_referer !~ "^https?://$host/") { return 403; } }
該範例使用Nginx內建的if模組,限制只能接收$host網站發送的請求,如果來自其他網站的請求,Nginx會回傳403。
六. 防文件下載漏洞
為了防止存取不正當的文件,如私人文件、腳本、設定檔等,請使用以下策略:
location ~* .(xls|doc|pdf)$ { valid_referers none blocked server_names; if ($invalid_referer) { return 401; } }
此範例使用Nginx內建的valid_referers模組,當發現請求來自沒有經過授權的網站時,會傳回401。
七. 禁止一些URL存取
在實際專案中,有些URL可以被攻擊者利用,例如admin.php、login.php等。我們可以直接禁止它們的訪問。
location ~ /(admin|login).php { deny all; }
此範例的配置,禁止了存取以admin.php和login.php結尾的URL。
八.完整範例
最後,根據以上的配置,我們可以得到以下的完整範例:
server { listen 80; server_name yourdomain.com; # 设置过滤规则 location / { # 禁止非法请求 limit_conn_zone $binary_remote_addr zone=one:10m; limit_req_zone $binary_remote_addr zone=two:10m rate=1r/s; limit_conn one 10; limit_req zone=two burst=5 nodelay; # 防止XSS攻击 if ($args ~* "<script.*>") { return 403; } # 防止SQL注入 if ($args ~* "select.*from") { return 403; } # 禁止admin和login的访问 location ~ /(admin|login).php { deny all; } } # 防止文件下载漏洞 location ~* .(xls|doc|pdf)$ { valid_referers none blocked server_names; if ($invalid_referer) { return 401; } } }
以上就是Nginx URL安全性原則所寫的指南。希望可以為你的Nginx配置提供一些幫助,提高系統的安全性。
以上是Nginx URL安全性原則編寫指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!