红穆笔记
首頁 踩坑總結 Nginx 屏蔽敏感目錄,安全防護
踩坑總結

Nginx 屏蔽敏感目錄,安全防護

Nginx 屏蔽敏感目录,安全防护

起因

前幾天給博客加了後臺管理功能,新增了 SQLite 數據庫目錄 Mdata 和緩存目錄 Mcache。功能跑通之後,一個念頭突然冒出來:

如果我直接訪問 https://域名/Mdata/content.db,會發生什麼?

試了一下,瀏覽器開始下載一個文件——數據庫文件被完整暴露了。裏面裝着所有文章內容、用戶密碼哈希、翻譯緩存,一旦被爬蟲或路人下載走,整個站就成了透明玻璃房。

這篇文章記錄一下排查和修復的過程,也給後來者一個參考。

一、先確認到底暴沒暴露

不要憑直覺,先測。用 curl 或瀏覽器逐個訪問:

curl -I https://你的域名/Mdata/content.db
curl -I https://你的域名/Mcache/_config.php
curl -I https://你的域名/Mdata/views.log
curl -I https://你的域名/Mdata/content.db-wal

看返回的 HTTP 狀態碼:

返回碼 含義 200 OK 危險,文件被公開下載 403 Forbidden 被拒絕,但暴露了路徑存在 404 Not Found 理想結果,跟不存在一樣 如果是 200,事情就得處理了。

二、爲什麼寶塔默認擋不住

寶塔面板的默認 Nginx 配置裏,PHP 處理規則長這樣:

location ~ \.php$ {
    fastcgi_pass unix:/tmp/php-cgi-74.sock;
    include fastcgi.conf;
}

它只管 .php 文件,其他擴展名(.db.log.lock)會走靜態文件規則,直接被 Nginx 當普通文件吐給用戶。所以 content.db 就這樣裸奔了。

有人會想:那把 .db 加到 PHP 規則裏不就行了?不行,那會讓 Nginx 試圖用 PHP 解析二進制文件,結果是亂碼或 500。

正確做法是用一個獨立的前綴匹配規則,把整個目錄掐掉

三、核心配置

打開寶塔面板 → 網站 → 點擊站點 → 配置文件,找到 server {} 塊,在裏面加入:

# 屏蔽數據與緩存目錄
location ^~ /Mdata/ {
    return 404;
}
location ^~ /Mcache/ {
    return 404;
}

保存,Nginx 會自動 reload。再測一遍那四個 URL,應該全部返回 404

就這兩條,問題解決了。

四、加固:擴展到全站

擋掉兩個目錄只是起點。順手加上幾條通用規則,覆蓋更多場景:

# ============ 安全加固 ============

# 屏蔽隱藏文件(放行 .well-known 給證書驗證用)
location ~ /\.(?!well-known) {
    return 404;
}

# 屏蔽數據與緩存目錄
location ^~ /Mdata/ {
    return 404;
}
location ^~ /Mcache/ {
    return 404;
}

# 屏蔽後臺密鑰 / 會話文件
location ~ ^/admin/_(key_.*|auth)\.php$ {
    return 404;
}

# 兜底:禁止訪問任何數據庫文件
location ~* \.(db|sqlite|sqlite3|db-wal|db-shm)$ {
    return 404;
}

# 禁止訪問日誌 / 鎖文件
location ~* \.(log|lock)$ {
    return 404;
}

# 禁止訪問備份 / 臨時 / 配置文件
location ~* \.(bak|old|orig|save|swp|swo|tmp|inc|ini|conf)$ {
    return 404;
}

逐條解釋:

  1. 隱藏文件規則:擋住 .git.env.htaccess 這類文件。(?!well-known) 是負向先行斷言,避免誤傷 .well-known(Let's Encrypt 簽發證書用)。
  2. 目錄屏蔽:Mdata / Mcache 兩個核心目錄。
  3. 後臺文件屏蔽Madmin/_key_*.php 裏存着登錄密鑰、_auth.php 裏存着會話 token。雖然內容被註釋包裹不會泄露,但多一層是一層。
  4. 擴展名兜底:萬一哪天你把 Mdata 改名成 Data、或者有別的目錄裏也有 .db,這條規則依然攔得住。
  5. 日誌/鎖文件views.logviews.lockphp_error.log 這類文件,內容可能包含 IP、UA、錯誤堆棧。
  6. 備份/臨時文件:編輯器(vim / VSCode / PHPStorm)會生成 .swp~.orig 之類,開發者改代碼時忘記刪掉,就會暴露源碼。

六、關於 403404 的哲學

安全圈有一句老話:

不要告訴攻擊者你做錯了什麼。

一個 403 Forbidden 的響應,等價於對掃描器廣播:"這裏有東西,只是我現在不給你。" 攻擊者下一步的動作就是嘗試繞過、猜路徑、找漏洞。

404 Not Found 是沉默——"你看到的和我看到的沒什麼不同"。

對自用的小站來說,攻擊者本來也沒那麼"精準打擊",大多是自動化掃描。給個 404,掃描器一般就略過了。

微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

浏览器缓存增加你网站二次访问速度

瀏覽器緩存增加你網站二次訪問速度 踩坑總結

使用瀏覽器緩存官方話語:如果用戶會多次訪問您的網站,那麼靜態資源的瀏覽器緩存可以節省用戶的時間。緩存標頭應當應用到所有可緩存的靜態資源中,而不僅僅是應用到一小部分靜態資源(例如,圖片)中。可緩存的資源包括JS和CSS文件、圖像文件及其他二進制對象文件(媒體文件和PDF文件等)。通常情況下,HTML不…
👁 202
常用正则表达式

常用正則表達式 踩坑總結

正則表達式網址(URL)[a-zA-z]+://[^\s]*IP地址(IP Address)((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)電子郵件(Email)\w+([-+.]\w+)*@\w+([-.]\w+)*…
👁 243

推薦閱讀

响应式创意餐饮酒店装饰设计网站模板 0877

響應式創意餐飲酒店裝飾設計網站模板 0877 實用收藏 易優模板

此套eyoucms響應式模板適用於創意餐飲、酒店與裝飾設計行業,設計風格現代時尚,能夠展示餐飲空間、酒店設計、裝飾案例及設計理念。有助於設計公司在線上吸引高端商業項目客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優C…
👁 31
(自适应手机端)简繁绿色HTML5响应式环保设备pbootcms模板 环保科技公司网站源码下载 0820

(自適應手機端)簡繁綠色HTML5響應式環保設備pbootcms模板 環保科技公司網站源碼下載 0820 實用收藏 pbootcms模板

一款簡繁綠色響應式環保設備與環保科技PbootCMS網站模板,支持PC與WAP端。設計風格清新環保,適合環保科技公司在兩岸及華人市場展示綠色技術與企業形象。有助於企業拓展綠色產業合作。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.c…
👁 38
帝国cms 多条件查询之IN查询

帝國cms 多條件查詢之IN查詢 程序筆記 帝國cms

在帝國cms中,偶然需要用到in查詢,也就是多條件查詢中的:在使用這個的時候,發現IN查詢並不能查詢到我的結果,於是翻找PHP代碼,發現下面的函數里需要修改!function SearchDoKeyboard($f,$hh,$keyboard){ // print_r($keyboard);echo…
👁 223
php 将一个字符串分割为组成它的字符

php 將一個字符串分割爲組成它的字符 語言筆記 PHP

問: php裏如何將一個字符串分割爲組成它的字符?比如hello -> [h, e, l, l, o] 以下有三種方法:這是需要被分割的字符串: $str = 'Hello小樣';字符串的長度:$len = mb_strlen($str, 'utf8');// 7第一種:$arr = str_…
👁 182
汽车配件外贸响应式英文网站模板 1117

汽車配件外貿響應式英文網站模板 1117 實用收藏 易優模板

一款針對汽車配件外貿的eyoucms響應式英文網站模板。設計風格專業國際,能夠展示汽車配件產品、技術參數、出口優勢及全球市場。有助於汽配企業在國際市場上展示品牌,拓展海外業務。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易…
👁 42
(自适应手机端)生活服务类网站模板 本地信息服务网站源码下载 1056

(自適應手機端)生活服務類網站模板 本地信息服務網站源碼下載 1056 實用收藏 pbootcms模板

一款生活服務類與本地信息服務PbootCMS網站模板,支持PC與WAP端。設計風格清新實用,適合展示本地生活服務信息、分類廣告及商家黃頁。有助於本地信息平臺在線上吸引用戶與商家入駐。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.cn…
👁 56