HTTP 資料傳輸的資訊安全與 Http Header的設定

HTTP 資料傳輸的資訊安全與 Http Header的設定

這篇文章主要針對 HTTP 這個通訊協定的資訊安全做基本的介紹。

HTTP 是所有網路服務與網站的通訊基礎。

因此,要打造安全的網站,必須先對 HTTP有基本的了解。

我們主要針對 Http Request Get/POST 的資料傳輸來說明HTTP可能的資訊安全風險。

另外,我們也介紹三個常見必且與資訊安全相關的 Http Header 。

 

Http Get Request

這是一個 Http Get Request 的實例。 HTTP GET 透過網址的方式將參數透過網址傳遞。

GET / HTTP/1.1
Host: shopping.pchome.com.tw
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-TW,zh;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: ECC=d999cb84f6f83e3f055702081178b0f2;_ga=GA1.3.1654285566.1418019640
If-Modified-Since: Sun, 19 Jul 2015 02:29:29 GMT

這個例子中,說明瀏覽器透過 HTTP/1.1通訊協定,GET “shopping.pchome.com.tw”

另外,User-Agent 說明瀏覽器為 Chrome/4.

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36

使用的語言為繁體中文與 Locale

Accept-Language: zh-TW,zh;q=0.8,en-US;q=0.6,en;q=0.4

這些參數值預設為瀏覽器提供傳送,對於網站端而言是否能夠全部信任這些參數呢? 當然不是!!

因為這些所以的參數都是可以修改後傳送到網站伺服器的。

如果有網站利用 Http Get 參數傳送帳號密碼,這樣的設計就會產生資訊安全漏洞。

https://www.example.com/?pass=password&user=Tony

因為這樣的帳號資訊有可能會透過下列幾種方式被取得:

  • 1. 網路資料傳述:這個URL 傳輸在網路上是很容易被其他人知道帳號,
  • 2. 瀏覽器歷史紀錄:瀏覽器通常會用瀏覽歷史紀錄,透過瀏覽器的歷史紀錄也會知道該使用者的帳號密碼。
  • 3. 透過Referer,間接將該參數傳遞傳送出去
  • Referer: http://www.reDirect-website.com/?pass=password&user=Tony

Http POST Request

HTTP Post 將參數利用 message Body 的方式打包在整個Http Request 訊息傳遞的封包中。

透過 http Post參數傳遞相對於 Http Get 來說,Http Post 相對比較安全。因此,敏感性資料的傳遞不可以使用 http Get 來傳遞。

POST https://www.example.com/signin HTTP/1.1
User-Agent: Mozilla/5.0 (Intel Windows)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;
Accept-Language: en-US,en;q=0.5
Referer: https://www.example.com/
Cookie: JSESSIONID=123ASDFAGASDFASDFASDF08F68;
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 159
Host: www.example.com


action=username=myName&password=myPassword

 

Http Response

對於網站來說,回傳給用戶端或是瀏覽器最多的資訊就是 HTML網頁。

除了網頁資訊之外還有必要的 Http Header ,這邊介紹幾個特別與常見跟資訊安全有關的 Http Header

Cache-Control

網頁快取的no-cache, no-store, Expires: -1等

快取的設定可以有效的幫助瀏覽網頁速度的使用者體驗,並且也可以有效減少網站的效能負擔。

一般像是圖形檔、或是不經常修改的 JavaScript 我們都會設定快取。

但是,如果有些是敏感性資訊的網頁內容,例如登入帳號密碼、銀行存款餘額資訊等,這些網頁資訊就不適合做快取的設定。

 

HSTS (Strict-Transport-Security)

這個設定主要通知瀏覽器之後的瀏覽行為強迫都要使用 HttpS。

Https 可以讓資料瀏覽器與網站間的資料傳輸加密,減少 Man in the Middle 的資訊安全漏洞風險。

Strict-Transport-Security: max-age=153000

 

X-Frame-Options

X-Frame 這個設定是什麼呢? 這個設定主要是要解決 Clickjacking的問題!

什麼是 Clickjacking呢?

舉下列這個圖當例子。駭客可能利用一個網站頁面

Twitter要求點選使用者條款,讓使用者看到一個 Twitter的網頁

但是背後真實網站誘導使用者點選的卻是賭博網站 Play!

為了避免這樣的問題,就可以設定 X-Frame:

X-Frame-Options: deny

 

X-XSS-Protection

Http Header 是有可能被挾帶 JavaScript

GET / HTTP/1.1
Host: shopping.pchome.com.tw
Connection: <javaScript>alert</JavaScript>
Cache-Control: max-age=0

因此,多半的瀏覽器都會將這樣的 JavaScript 過濾,

Http Header 也可以設定 XSS的保護:

X-XSS-Protection: 1; mode=block

 

其他與 http Header 有關的資訊安全風險,可參考

https://www.owasp.org/index.php/List_of_useful_HTTP_headers

Leave a Reply

Your email address will not be published.