搜尋此網誌

2010年7月27日 星期二

[教戰守則] 避免記憶力驚人的瀏覽器帶來機密資料的外洩

all-browser-logos

常常進行網路瀏覽的使用者一定有一個感受,那就是有很多的機會都需要填寫一些繁瑣的表格,而其中有很多基本資料 (例如姓名、電話) 甚至是不斷重複出現的。為了減少使用者的困擾,有不少相關的外掛工具可以幫助使用者自動填寫一些標準的欄位。而除了透過外掛工具外,大多數瀏覽器還內建了另外一個較為陽春的功能,就是會把之前填寫過的網頁資料記錄下來,而下次當你需要重複填寫同一個網頁時,這些資料就可以自動出現。這個功能首先由 Microsoft 所推出,稱之為 auto complete。

自動記憶曾經利用這台電腦的瀏覽器 (此例為 Chrome) 登入過 facebook 的帳號。auto complete 001

以畫面上的例子而言,瀏覽器會把使用者曾經輸入到 Facebook 電郵地址欄位的資料記憶下來,並根據使用者已經輸入的資料顯示合適的建議。這個情況出現在自己的電腦上,我相信沒有太多人會因此而感到不安。但是如果這個情況出現在一台公用的電腦上,那麼就會產生一些值得討論的議題。首先雖然以資訊安全的角度來說使用者的帳號也是需要保密的資料之一,但是對於大多數的使用者而言帳號並不是什麼極具機密的資料,儘管帳號就是自己的電郵地址亦然。也就是說以 Facebook 這個例子而言,對使用者來說往往並不會造成困擾,而且也不致於造成實際的損失。但是如果今天自動顯示的資料不是一個電郵地址,而是身分證字號、甚至是信用卡卡號呢?

好心的中華電信網頁,自動把信用卡卡號填寫出來。credit card autocomplete - cht

這個實際例子所帶來的潛在危機,我想不需要我在此多做說明。要避免這類問題的產生,系統開發商負有絕對的責任。因為 auto complete 在不同的瀏覽器之間有不同的行為,所以要有效地避免此一問題就必須採用多管齊下的方式。建議作法如下:

  1. 關閉 auto complete 的功能。此一功能可以透過在 text 或 password 輸入元件內加上 autocomplete=”off” 的參數加以關閉。此外也可以透過在 form 加上 autocomplete=off 的參數關閉單一 form 內所有 text 與 password 輸入元件的 auto complete 功能。
  2. 關閉網頁的 cache。這裡指的是利用 HTTP 標頭的方式告知瀏覽器不要將此一網頁存放至快取內。
  3. 採用加密的 (SSL)方式。

我以一個簡單的 PHP 程式為例,這個程式採用上述的建議以避免瀏覽器將使用輸入姓名 (username)、電話 (telephone) 與密碼 (password) 三個欄位內的資料加以記憶以供日後自動輸入。

<?php
    if ($_SERVER['HTTPS']!="on") {
       $url = "https://".
              $_SERVER['SERVER_NAME'].
              $_SERVER['REQUEST_URI'];
       header ("Location: $url");
       exit;
    }
    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
    header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate, private");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
?>
<html>
<head>
<title>Auto Complete Defend Demo</title>
</head>
<body>
<form action="foo.php" action="POST" autocomplete="off">
Name: <input type="text" name="username"><br/>
Tel: <input type="text" name="telephone"><br/>
Password: <input type="password" name="password"><br/>
<input type="submit">
</form>
</body>
</html>

雖然說解決此一問題是系統開發商的責任,但是身為一個使用者卻不應該把自身資料的安全全然交由廠商來保護。使用者可以採用下列步驟來保護自己:

  • 盡量避免利用公用電腦 (或他人的電腦) 存取重要的網路服務。
  • 利用主流瀏覽器所提供的私密瀏覽功能來存取重要的網路服務。這個保護措施不但在使用公用電腦 (或他人的電腦) 時相當實用,就連使用自己的電腦時也可以採用。畢竟要永遠限制其他人無法存取到你的電腦可說是一件不可能的任務。
  • 在使用一些自動幫助填寫表格的外掛工具時請小心評估哪些資料可以記憶,那些又不該記憶。

雖然這類問題因為無法在遠端發動攻擊與有效地自動化,所以並不容易產生大規模的資料外洩事件。但是對於使用者而言,保護自身資料的私密性絕對是責無旁貸的責任。因為就算只有一筆資料外洩,只要那是你的資料,對你而言就是再嚴重不過的事情了。

About