首頁  >  文章  >  運維  >  Nginx URL安全性原則編寫指南

Nginx URL安全性原則編寫指南

PHPz
PHPz原創
2023-06-10 20:39:08989瀏覽

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 ~* "<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn