我想大部分人都應該知道 robots.txt 檔案的功用 (如果不知道可參考我之前的文章),因為 robots.txt 是給網頁爬蟲機器人 (Web Crawler) 看的,搜尋引擎要來抓網站網頁進行索引前,都會「禮貌性」的先抓取 robots.txt 檔案回去分析,若特定 URL 真的允許抓網頁回去才會繼續下載網頁,不過看這個檔案的 人類就不一定這麼有禮貌,讓駭客知道了你「不想被抓的目錄」後,反而讓駭客產生興趣,進而企圖攻擊這些你不想被知道的網頁路徑,所以選擇不將這些路徑放到 robots.txt 定義檔裡,然而,這觀念是正確的嗎?No!!! 請繼續看下去…
有些人會選擇不將機敏目錄放到 robots.txt 檔案裡,為的就是不讓「任何人與機器」知道有這個目錄的存在,但很不幸的搜尋引擎找網址的能力必你想像的還強很多,你不列在 robots.txt 裡面,還是會被知道有這些網頁的,所以無論如何,不想被搜尋引擎找到的網頁都要列入 robots.txt 定義檔中!
由於 robots.txt 檔案必須對外公開,所以每個人都能查看其內容,假設你有個網站,其前台與後台是在同一個網站下,假設網站後台的網址在 /Backend/ 路徑下,然而你為了不讓搜尋引擎進入這個目錄,所以你會將該 URL 路徑列入 robots.txt 檔案中,例如:
User-agent: *
Disallow: /Backend/
定義 robots.txt 有個優點,搜尋引擎無論如何都不會檢索這個路徑下的所有內容,因此就算你的後端沒有任何身份驗證或忘記設定權限,至少不會被各大搜尋引擎搜索到任何資料,因此這樣的設定有助於降低被 Google Hacking 的機會,因此無論如何,不想被搜尋引擎找到的網頁都要列入 robots.txt 定義檔中!
然而「讓駭客知道了你不想被抓的目錄後,反而讓駭客產生興趣,進而企圖攻擊這些你不想被知道的網頁路徑」這樣的論調難道不會發生嗎?要如何避免這個問題呢?關於這個問題,我建議用以下方法解決:
我想許多網站礙於預算問題,無法將現有的「後台管理功能」從現有的網站專案中切割開來,甚至無法多租一個空間來執行後台網站,這種情況下還是有方法的,那就是「限制後台所在的資料夾,設定特定目錄的 IP 來源存取限制」。
除此之外,我還是建議設定 robots.txt 並拒絕該目錄所有 User-Agent 都無法檢索該目錄,我最近研究出一個設定技巧,可以有效解決這個被猜到目錄位址的問題,方法如下:。
1. 假設你的後端位址在 /Backend/ 路徑下
2. 建議你將此目錄改成 /Backend87916246412145/ 路徑下,也就是在原本目錄名稱多加上一個亂數或亂碼,讓外人猜不到此網站後台的確切路徑(除非有內鬼)
3. 此時你可以放心的設定 robots.txt 檔案,但是設定的內容如下:
User-agent: *
Disallow: /Backend
請注意:網址的部分是 /Backend 而不是 /Backend/ 喔!
透過以上設定,有以下兩個優點:
如此一來,你的後台既不怕 Google Hacking 的攻擊,也可有效阻擋人為攻擊的機會!
結論
心得分享
可能還是會有人認為說,我的網站有實作登入驗證功能啊,駭客不知道密碼、我網站又沒有 SQL Injection 的問題,怎麼還有機會被入侵呢?
驗證 (Authentication) 與 授權 (Authorization) 是完全不同的兩回事,今天你實作了驗證機制,限制了登入,這並不代表所有後台功能與檔案都有做了適當的授權,我在研究 Google Hacking 攻擊方式的時候發現到,有許多網站雖然實作了身份驗證,但卻沒有把「授權」徹底落實!
舉個例子來說,後台經常都有檔案上傳的功能,上傳的檔案通常是不刪除的,這也代表著,當管理者上傳了錯誤的檔案(例如上傳了含有使用者個資的資料),這個檔案也許短暫出現在前台頁面過一段時間,進而導致該檔案被搜尋引擎建立了索引與快取,事後你雖然把檔案更新了,但是舊的檔案還在網站上面,也代表著這個檔案還是能被使用者搜尋到,任何人只要熟悉類似 Google Hacking 技巧,非常輕易的就能找到這些帶有個資的檔案,因此還是要設定 robots.txt 才能真正有效阻止這類事件再度發生!
相關連結