這一篇講的是我們在接手別人的網站時,最常發現的一個資安問題。而且它不是「可能有風險」的那種,是直接把東西放在外面的那種。
備份檔為什麼會跑到網路上
情境幾乎都一樣:要改網站之前,先備份一下比較安心。
於是把整個網站目錄打包成一個壓縮檔,資料庫也匯出一份。問題是打包完之後,那個檔案放在哪裡?
最順手的位置,就是網站目錄裡面。因為你人就在那裡,指令下下去檔案就產生了,不用再搬。
而網站目錄裡面的東西,是對外公開的。那是網站的意思。
所以 backup.zip 這個檔案放在網站根目錄,就等於任何人在你的網址後面加上 /backup.zip 都能直接下載。
這件事沒有任何徵兆。網站完全正常,沒有錯誤訊息,紀錄檔裡那筆下載看起來跟一般訪客沒兩樣。
那個檔案裡面有什麼
如果是整個網站目錄的壓縮檔,裡面會有網站的設定檔。設定檔裡面會有:
- 資料庫的位址、帳號、密碼
- 寄信用的信箱帳號密碼
- 金流、簡訊、地圖等各種服務的金鑰
- 後台的加密設定
如果是資料庫的匯出檔,裡面會有:
- 所有客戶的姓名、電話、信箱、地址
- 所有的詢價和訂單紀錄
- 後台管理員的帳號與密碼(加密過,但可以慢慢破)
兩種都拿到的話,等於整個網站連同客戶資料全部交出去。而且對方不需要入侵任何東西,他只是下載了一個公開的檔案。
客戶個資外洩在台灣是有法律責任的,這不只是網站安全的問題。
為什麼說檔名是可以猜的
有人會想:檔名只有我知道,應該找不到吧。
實際上備份檔的命名方式非常固定,大概就這幾種組合:
- 功能名稱:backup、bak、back、dump、db
- 網站名稱:你的網域去掉點,或是公司名稱縮寫
- 日期:20261110、2026-11-10、1110
- 副檔名:.zip、.rar、.tar.gz、.sql、.7z
把這幾組排列組合,總數大概幾千種。自動化工具跑完幾千個網址只要幾分鐘,而且這種掃描是全網路無差別進行的,不需要有人特別針對你。
更直接的狀況是:搜尋引擎可能已經收錄了那個檔案。
如果有任何一個頁面連到它,或者你的主機允許列出目錄內容,搜尋引擎的爬蟲就會抓到。然後它就出現在搜尋結果裡,連猜都不用猜。
還有一種同樣常見:.sql 和 .tar.gz 這類檔案,有些主機的安全設定會擋住,但有些不會 —— 擋不擋跟主機怎麼設定有關,不能假設。
一分鐘自己確認
打開瀏覽器,在你的網址後面依序加上這些,看會不會跳出下載:
/backup.zip/backup.sql/db.sql/backup.tar.gz/www.zip- 你自己公司名稱或網域的縮寫
.zip
出現「找不到頁面」是正常的。如果開始下載,立刻把那個檔案刪掉。
另外再試一個:在網址後面加上 / 加上你放檔案的目錄名稱(例如 /uploads/、/files/)。如果出現一個檔案列表,那表示目錄內容是公開的,裡面所有東西都能被翻出來。這個設定要關掉。
最後一個檢查:到搜尋引擎搜尋 site:你的網域 zip,以及把 zip 換成 sql、rar、tar 各試一次。如果有東西出現,代表已經被收錄了,刪檔之外還要去搜尋引擎的管理工具送出移除。
正確的做法
原則只有一句:備份檔不要放在網站目錄裡面。
備份應該放在:
- 網站目錄的上一層(網站讀不到的地方)
- 或是完全不同的機器、雲端儲存空間
第二種同時解決了另一個問題:備份跟網站放在同一台機器上,機器壞掉的時候兩個一起沒了。這一點值得單獨講一篇。
如果因為某些原因備份一定要放在網站目錄裡(例如用面板的備份功能,預設路徑就在那裡),至少要做到兩件事:
- 設定上擋掉從外部直接下載這些副檔名
- 關掉目錄列表功能
但這是退而求其次。只要設定有一天被覆蓋掉,檔案就又公開了,而你不會知道。
我們接手一個網站的第一週,一定會做這幾件事:掃一遍網站目錄裡有沒有壓縮檔和匯出檔、確認目錄列表是關的、確認備份的實際存放位置在網站目錄之外。這件事花不到半小時,但它是少數「一次做完就長期有效」的資安動作。如果你剛才試出來真的下載到了東西,先刪掉,然後可以看一下我們的維護方案包含哪些檢查。
