首頁> 運維> Nginx> 主體

Nginx URL安全性原則編寫指南

PHPz
發布: 2023-06-10 20:39:08
原創
967 人瀏覽過

Nginx作為一款高效能的Web伺服器和反向代理伺服器,廣受網站架構師的青睞。但在使用Nginx時,我們也需要注意安全方面的問題,特別是在處理URL。

由於Nginx的彈性,如果我們不採取一些URL安全性策略,就可能受到以下攻擊:

  1. SQL注入
  2. XSS攻擊
  3. 非法文件下載
  4. CSRF攻擊
  5. 非法請求存取等

#本文將介紹Nginx URL安全策略編寫的指南。

一. 前置條件

在編寫Nginx URL安全策略之前,需要對以下知識點掌握:

  1. 正規表示式
  2. Nginx設定檔語法
  3. HTTP協定基礎

二. 輸入過濾

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; } }
登入後複製

該範例做瞭如下的事情:

  1. 首先定義了兩個zone,也就是可以儲存狀態資訊的記憶體區域。 (這也意味著如果有很多的訪問,這種防護的成本可能會比較高)
  2. 如果同一個IP位址在 5 秒內發送了多於 100 個HTTP請求,則進行屏蔽。
  3. 如果同一個IP位址在 1 秒內發送了多於 5 次HTTP請求,則進行封鎖。

三. 防SQL注入

在實際開發中,避免SQL注入是必須的。為了防止SQL注入攻擊,我們可以如下配置:

location ~* (.php|.asp|.ashx)/?$ { if ($args ~* "select.*from") { return 403; } }
登入後複製

該範例用到了Nginx內建的if模組,防止攻擊者使用select語句從資料庫中獲取數據,如果有這種情況,返回403禁止訪問。

四. 防XSS攻擊

針對XSS攻擊,我們可以加強對輸入的偵測。如果偵測到可能的XSS攻擊,可以將連線重新導向到一個安全的URL,或傳回錯誤訊息。

if ($args ~* "") { 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 ~* "") { 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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!