跳到主要內容區塊

ntuccepaper2019

專題報導

小心!你的習慣出賣了自己
  • 卷期:v0044
  • 出版日期:2018-03-20

作者:陳俊傑 / 臺灣大學計算機及資訊網路中心教學研究組幹事


經典的「123456」、「password」仍然是SplashData機構所公布的2017年最爛密碼排行榜,顯示一般人仍習慣將密碼設定得簡單又好記,而導致自己的帳戶變得容易被盜[1]。因此,本文將以常見的GET與POST表單傳送方式為例,說明哪種方式較適合傳送具敏感性的資料。以及示範如何透過瀏覽器修改HTML碼,直接看到被記住的密碼,說明公共場所的電腦並不適合記住密碼。最後再介紹HTTP及HTTPS(SSL/TLS)協定,並分析其網路封包,認識如何加強網站的安全性。

 

實驗環境

1. 作業系統:Windows 2012 R2 Server
2. 程式語言:ASP
3. 網頁伺服器

 


圖1:IIS版本

 

前置作業

1. 表單頁(test.asp)的原始碼

<!DOCTYPE html>
<html>
<head>
<%@ codepage=65001%><!-- 強制轉成 UTF-8 -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>俊傑的電子報實驗 -表單頁</title>
</head>
<body>
<div style="text-align:center; border: 1px solid #3399FF; width: 400px; padding: 6px;">
<h2 style="color: #0066FF;">俊傑的電子報實驗 - 表單頁</h2>
<table>
<tr>
<td style="text-align:right;">
<form action="value.asp" method="post" target="_blank">
<p>ID:<input id="ID1" name="ID" type="text" size="30" /></p>
<p>Password:<input id="Password1" name="Password" type="password" size="30" /></p>
<p><input id="Submit1" name="Submit" type="submit" value="以 Post 傳送" /></p>
</form>
</td>
</tr>
<tr>
<td style="text-align:right;">
<form action="value.asp" method="get" target="_blank">
<p>ID:<input id="ID2" name="ID" type="text" size="30"  /></p>
<p>Password:<input id="Password2" name="Password" type="password" size="30" /></p>
<p><input id="Submit2" name="Submit" type="submit" value="以 Get 傳送" /></p>
</form>
</td>
</tr>
<tr>
<td style="text-align:left;">
<a href="view.asp" target="_blank">前往瀏覽頁</a>
</td>
</tr>
</table>
</div>
</body>
</html>

 

2. 接值頁(value.asp)的原始碼

<!DOCTYPE html>
<html>
<head>
<%@ codepage=65001%><!-- 強制轉成 UTF-8 -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>俊傑的電子報實驗 - 接值頁</title>
</head>
<body>
<div style="text-align:center; border: 1px solid #FFCC99; width: 400px; padding: 6px;">
<h2 style="color: #FF9933;">俊傑的電子報實驗 - 接值頁</h2>
<table border="1">
<tr>
<th>&nbsp;</th>
<th style="width: 150px;">ID</th>
<th style="width: 150px;">Password</th>
</tr>
<tr>
<th>POST<br />結果</th>
<td><%= Request.Form("ID") %></td>
<td><%= Request.Form("Password") %></td>
</tr>
<tr>
<th>GET<br />結果</th>
<td><%= Request.QueryString("ID") %></td>
<td><%= Request.QueryString("Password") %></td>
</tr>
</table>
</div>
</body>
</html>

 

第一項實驗:POST與GET,哪個較不適合敏感性資料?

 


圖2:第一項實驗的架構圖

 

名稱

說明

ID

  1. test1
  2. test2

識別

password

  1. 123456
  2. 456789

密碼

submit

  1. 以Post傳送
  2. 以Get傳送

「送出」按鈕


表1

說明:在HTTP協定下實驗,並分別使用「以POST傳送」及「GET傳送」,從URL路徑來觀察兩者的不同。

1. 輸入識別(ID)及密碼(Password)

 


圖3

 

2. 按「以POST傳送」的結果

 

 


圖4

 

3. 按「以GET傳送」的結果

 


圖5

 

小結:實驗發現,GET方式能在URL網址就看到密碼!根據《Soul & Shell Blog》所載文章,其實是因為POST是將表單放在訊息主體中傳送,而GET則是將表單內容轉為搜尋字串的關係[2]。因此,若要傳送敏感性資料,且打算只從GET或POST作選擇時,建議使用POST方式傳送。

 

第二項實驗:如何用瀏覽器取得所儲存的密碼?

 


圖6:第二項實驗的架構圖

 

名稱

說明

ID

test

識別

password

123456

密碼

submit

以Post傳送

「送出」按鈕


表2

 

說明:使用IE瀏覽器作實驗,選擇記住所輸入帳號及密碼。接著關閉瀏覽器後再開啟網頁,確認是否真的記住所輸入帳號及密碼。最後再示範如何透過瀏覽器修改屬性,來取得密碼內容。

 

1. 輸入ID及密碼,並在提示中選擇「儲存密碼」,再關閉瀏覽器

 


圖7

 

2. 重新開啟瀏覽器,以確認所填的ID與密碼均自動載入

 


圖8

 

3. 在「密碼輸入框」按滑鼠右鍵,選「檢查元素」

 


圖9

 

4. 在密碼屬性(type),連點滑鼠左鍵兩下,進入編輯模式

 


圖10

 

5. 改成文字(text)屬性,按Enter鍵,就能看到所儲存的密碼

 


圖11

 

小結:本次實驗是透過瀏覽器的HTML編輯功能讓密碼變成明碼,而Chrom、Firefox其實也有類似的機制。另外,根據《硬是要學》的說明,瀏覽器所內建的帳號密碼儲存功能並非加密儲存[3]。雖然文章有提到可以使用瀏覽器所提供的防護措施來加強管理,但公開場所的電腦仍不建議自動儲存密碼,因為仍然有可能不小心就讓密碼洩露出去。

 

第三項實驗:HTTP與HTTPS,哪個比較安全?

 


圖12:第三項實驗的架構圖

 

名稱

說明

ID

  1. test1
  2. test2
  1. HTTP協定的識別
  2. HTTPS協定的識別

password

  1. 123456
  2. 456789
  1. HTTP協定的密碼
  2. HTTPS協定的密碼

submit

以Post傳送

「送出」按鈕


表3

 

說明: 使用者填寫帳號(ID)及密碼(Password)後,分別使用HTTP及HTTPS協定的方式,透過POST方式傳送,再透過WIRESHARK軟體,分析其網路封包的傳輸狀況。

 

1. 在HTTP及HTTPS協定下,分別輸入識別及密碼

 


圖13

 


圖14

 

2. 載入表單頁時,從WIRESHARK看封包傳輸情形

 


圖15

 


圖16

 

3. 按下「以POST傳送」按鈕,在WIRESHARK的封包傳輸情形

 


圖17

 


圖18

 

小結:實驗的結果,說明了在網路封包中,HTTPS協定是能在內容進行加密,而HTTP則能直接所傳輸的內容。經閱讀《Android技術特攻隊》的文章,說明HTTPS提供三項功能,即內容加密、身份認證及數據完整性[4]。因此,若要傳送敏感性資料,建議使用HTTPS協定。

 

結論

在使用習慣上,不建議讓瀏覽器記住任何具敏感性的資料,在網站的管理上,使用HTTPS協定及POST方式傳送,似乎較為安全。但《iThome》亦有文章指出,加密連線可能會佔用過多的伺服器資料,亦有可能成為有心人士用來隱藏自己的惡行的工具[5]。因此,在安全性及效能的考量下,仍建議搭配其他管理機制,以兼顧實際需求。

 

參考資料

[1] 2017年「最爛密碼」百大排行榜 123456再度蟬聯冠軍!。數位時代。檢上檢索日期:2018年02月05日。網址:
https://www.ettoday.net/news/20171220/1076224.htm
https://www.teamsid.com/worst-passwords-2017-full-list/
[2] SJ(2011年02月02日)。淺談 HTTP Method:表單中的 GET 與 POST 有什麼差別?Soul & Shell Blog。檢上檢索日期:2018年02月12日。網址:
https://blog.toright.com/posts/1203/%E6%B7%BA%E8%AB%87-http-method%EF%BC%9A%E8%A1%A8%E5%96%AE%E4%B8%AD%E7%9A%84-get-%E8%88%87-post-%E6%9C%89%E4%BB%80%E9%BA%BC%E5%B7%AE%E5%88%A5%EF%BC%9F.html
[3] Werboy(2013年08月08日)。在Chrome瀏覽器中儲存的密碼有多安全?硬是要學。檢上檢索日期:2018年02月12日。網址:
https://itw01.com/UORENPF.html
[4] WangXin(2016年03月27日)詳解https是如何確保安全的?Android技術特攻隊。檢上檢索日期:2017年08月01日。網址:
http://www.wxtlife.com/2016/03/27/%E8%AF%A6%E8%A7%A3https%E6%98%AF%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E5%AE%89%E5%85%A8%E7%9A%84%EF%BC%9F/
[5]李宗翰(2014年12月25日)HTTPS網站居主流 資安重新定義。iThome。檢上檢索日期:2017年08月01日。網址:
https://www.ithome.com.tw/tech/93108