﻿# 從戰國策資訊外洩事件說明 robots.txt 定義檔與資安常識

今天從[資安人雜誌](http://www.informationsecurity.com.tw/)的電子報中發現一則駭人聽聞的熱門新聞：『[戰國策4,270筆資料外洩 Google全都露](http://www.informationsecurity.com.tw/article/article_detail.aspx?aid=4758)』。我上網研究了一下，果然還有許多非 Google 的搜尋引擎還殘留著快取住(Cached)完整的客戶資料與鉅細靡遺的訂單資訊，包括公司資訊、連絡人、電話、地址、身份證字號、購買了什麼服務、何時到期、折扣、帳號、密碼、.... 簡直什麼死人骨頭都在上面，這實在是太恐怖了，真無法想像這些資料落入詐騙集團手中後，這些客戶是何下場。

話說到此，就要提及今日的重點了，我問過許多朋友知不知道 [robots.txt](http://zh.wikipedia.org/wiki/Robots.txt) 這檔案是做什麼用的，有些人聽都沒聽過、有些人有聽過，但好像大多都沒在使用。（不清楚的請先看[這裡](http://zh.wikipedia.org/wiki/Robots.txt)）

像我們公司有對外的測試機都一定會加上 [robots.txt](http://zh.wikipedia.org/wiki/Robots.txt) 設定檔，內容如下：

```
User-Agent:*
Disallow:/
```

意思就是：**不允許**任何來爬我網站的[Web漫遊器](http://zh.wikipedia.org/wiki/%E7%B6%B2%E8%B7%AF%E8%9C%98%E8%9B%9B)([Crawler](http://en.wikipedia.org/wiki/Web_crawler))或[網路蜘蛛](http://zh.wikipedia.org/w/index.php?title=%E7%B6%B2%E8%B7%AF%E8%9C%98%E8%9B%9B&variant=zh-tw)(Spider)抓我網站的內容。

請注意：robots.txt 此檔編碼一定要是 ANSI 或 UTF-8 without BOM 才行，若加上了 [BOM](http://en.wikipedia.org/wiki/Byte_order_mark) 字元會導致 Google Crawler 無法正確解析此檔案。

特別要加上這段就是因為網站還不完整，但客戶想先看還是要給他們看，但除了客戶能看之外，網路上許多 [Crawler](http://en.wikipedia.org/wiki/Web_crawler) 也在看。像我們有時後網站後台的權限系統都會在最後才建置，這代表在建置網站的過程中可能會有一段時間不用任何帳號、密碼就可以登入。若真的要避免資訊外洩，通常我們會做出以下措施：

-   將測試網站擺在公司內網，不提供對外連結
-   若網站一定要對外開放，也應該設定限制 IP 存取
-   若不能限制 IP 存取，也應該設定帳號、密碼
-   若連帳號、密碼都不能設定，那就乖乖的設定 [robots.txt](http://zh.wikipedia.org/wiki/Robots.txt) 檔案吧! 通常這些 [Crawler](http://en.wikipedia.org/wiki/Web_crawler) 都會遵循網路的禮節，被定義為 Disallow 的目錄他們是不會來抓網頁的。

也許有時後客戶為了某些理由會要求網站先上線，但上線前我們一定要仔細評估資訊安全的風險，因為替客戶把關**資訊安全**是我們的責任，也是我們的專業，堅守住自己的原則真的很重要。有時後因為成本考量，的確要做出一些取捨，但自己的**底線**總是要的，你要非常清楚你的工作、你的專業、你的責任，這需要自律(self-disciplined)。

各位應該也很清楚「懶惰」是程式設計師的「**美德**」，沒有懶惰的個性就沒有精簡又可模組化的程式。但缺乏自律的程式設計師，不但做不好事，可能連還會害客戶遭受池魚之殃。所以正確的觀念應該是：「你可以懶，但要懶得有有品質，懶到讓大家尊重你，看到你的價值」。

一般人對於資訊安全的敏感度很低，即便是開發人員也一樣，沒有危機意識的人很容易就會寫出易受傷(Vulnerable)的程式碼，像[戰國策](http://www.nss.com.tw/)這次的資訊洩漏(Information Leakage)事件很明顯的就是他們有人認為「這網址只有我知道，搜尋引擎應該查不到我這裡吧」。

跟各位講，我從不安裝 [Google Toolbar](http://toolbar.google.com/) 或其他跟搜尋有關的 Toolbar，因為你要是沒設定好，他會自動將你所有瀏覽過的「網址」傳送出去，讓他們的 [Crawler](http://en.wikipedia.org/wiki/Web_crawler) 來抓取網頁。你可以不裝，但你的客戶可不見得都會聽你的，總會有人做出對資安不利的事，你唯一能做的就是把所有可能發生的風險都考量進去，凡事以最壞的狀況(worst-case)做打算就是了。

**最後，再分享一個使用** [**robots.txt**](http://zh.wikipedia.org/wiki/Robots.txt) **的技巧：**

若你真的有些網址不希望讓 [Crawler](http://en.wikipedia.org/wiki/Web_crawler) 來抓取網頁，也不想讓其他**人**來抓你某個目錄的網頁，或根本不想讓不相干的人知道你有這個目錄的話，建議你還是不要將定義寫到 [robots.txt](http://zh.wikipedia.org/wiki/Robots.txt) 中，因為 [robots.txt](http://zh.wikipedia.org/wiki/Robots.txt) 畢竟還是個公開的檔案，任何人都可以下載的。

舉個例子來說，我剛剛看了一下[戰國策的網站所定義的 robots.txt 定義檔](http://www.nss.com.tw/robots.txt)，內容如下:

```
User-agent: *
Disallow: /admin/
```

這時可以套用一句成語：「此地無銀三百兩」，因為這擺明了跟人家說「**我家的網站管理介面在 /admin/ 目錄下**」，雖然 **/admin/** 直接連接是連不進去的，但透過 Google 搜尋:  [site:www.nss.com.tw /admin/](http://www.google.com/search?hl=zh-TW&esrch=BetaShortcuts&q=site%3Awww.nss.com.tw+%2Fadmin%2F&lr=) 多少還是可以猜出一些後台的路徑或檔名。

總之，不想讓人家知道，就不要列在 [robots.txt](http://zh.wikipedia.org/wiki/Robots.txt) 了。不怕人家知道，那就大膽的放吧。

ASP.NET 2.0 的安全機制我覺得很漂亮，可以針對目錄做授權的單位，例如你可以在 /admin/ 目錄下放置一個 web.config 檔，內容設定如下：

```
<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>
</configuration>
```

所以任何目錄下的檔案不管是程式或靜態檔案都可以受到保護，但要是在 PHP 的執行環境下就不容易這麼做了，你的程式若真的漏了檢查權限的程式碼，就有可以被入侵，而且有些非程式的靜態檔案也容易被下載。

**相關連結**

-   [Robots.txt - 維基百科，自由的百科全書](http://zh.wikipedia.org/wiki/Robots.txt)
-   [戰國策4,270筆資料外洩 Google全都露](http://www.informationsecurity.com.tw/article/article_detail.aspx?aid=4758)
-   [robots.txt檔有什麼必要？](http://www.tan-studio.net/?p=26)
-   [Learn about robots.txt files - Search Console Help](https://support.google.com/webmasters/answer/6062608)
