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

Nginx URL安全性原則編寫指南

Jun 10, 2023 pm 08:39 PM
nginx 策略 url安全

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

tomcat伺服器怎麼能讓外網訪問 tomcat伺服器怎麼能讓外網訪問 Apr 21, 2024 am 07:22 AM

tomcat伺服器怎麼能讓外網訪問

nginx啟動指令和停止指令是什麼 nginx啟動指令和停止指令是什麼 Apr 02, 2024 pm 08:45 PM

nginx啟動指令和停止指令是什麼

thinkphp怎麼運行 thinkphp怎麼運行 Apr 09, 2024 pm 05:39 PM

thinkphp怎麼運行

Welcome to nginx!怎麼解決? Welcome to nginx!怎麼解決? Apr 17, 2024 am 05:12 AM

Welcome to nginx!怎麼解決?

nodejs專案怎麼部署到伺服器 nodejs專案怎麼部署到伺服器 Apr 21, 2024 am 04:40 AM

nodejs專案怎麼部署到伺服器

phpmyadmin怎麼註冊 phpmyadmin怎麼註冊 Apr 07, 2024 pm 02:45 PM

phpmyadmin怎麼註冊

造訪網站出現nginx怎麼解決 造訪網站出現nginx怎麼解決 Apr 02, 2024 pm 08:39 PM

造訪網站出現nginx怎麼解決

docker容器之間如何通信 docker容器之間如何通信 Apr 07, 2024 pm 06:24 PM

docker容器之間如何通信

See all articles