網頁標題: 什麼是JavaScript Hijacking?
 



  什麼是JavaScript Hijacking?
發問者:ithelp (IT邦初學者8級)
發問時間:2008-02-01 14:17:52
  一般認為,網頁安全威脅可能需要入侵網站伺服器、架設惡意網站,或在瀏覽時趁機在使用者電腦植入惡意程式等方式來攻擊,最近有人說只靠JavaScript Hijacking,就可以就能竊取資料,怎麼做到的?要如何避免?

-------

最佳解答
回答者:ithelp (IT邦初學者8級)
回答時間:2008-02-01 14:17:52
2007年三月由Fortify公司發表了一篇技術文件,描述JavaScript劫持(JavaScript Hijacking)攻擊如何利用Ajax與JSON搭配來竊取資料。這  種攻擊是跨站(Cross-Site)攻擊的一種變形,原理與XSS(Cross-Site Script,跨站指令攻擊)以及CSRF(Cross-Site Request Forgery,偽造跨站要求)類似,要實現這種攻擊需要受害網站、惡意網站、以及使用者瀏覽器等三方同時搭配,有別於一般透過入侵網站竊取資料的方式。

  Ajax與JSON
  Web 2.0是近年來的熱鬧話題,近一年來有許多成功的併購案都和它相關,彷彿重現當初網路泡沫時的熱潮。Web 2.0事實上是一種讓使用者高度參與的網路應用,而不是新的網路技術。在Web 2.0應用到的技術中,與JavaScript Hijacking有關的就是Ajax(Asynchronous JavaScript and XML)以及JSON(JavaScript Object Notation)。
首先來聊聊Ajax。傳統網頁要靠使用者按下更新(Refresh)鍵以觀看最新的網頁內容,但是像Gmail這樣應用Ajax的站臺,不需要使用者親自按更新鍵也能見到最新的收信夾資料,因為它能夠將用戶端與伺服器端連結起來,在不更新整個頁面的前提下,更新需要的資訊,也使得網站伺服器能夠更快速地回應。因為傳統的網站運作,是依靠瀏覽器抓取網頁並顯示給使用者,因此需要使用者手動按下更新鍵來觸發更新的行為。但是Ajax技術是使用JavaScript程式,在使用者端與伺服器端自行溝通,當有新資料的時候,JavaScript程式會自動抓取回來並且顯示在頁面上。這也是Ajax命名中所謂「非同步(Asynchronous)」的原因。而JSON其實是 JavaScript 的變數定義語法,是一種輕量級且可讀性高的資料轉換格式,規範在IETF RFC-4627之中。
Ajax架構下雖然可以使用XML,但是若傳遞資料的格式很簡單,使用XML會有「殺雞用牛刀」的感覺。因為XML既然是一種makeup language,定義起來就很嚴謹,如同HTML一樣需要表頭及表尾。若是傳遞的資料格式不太複雜,利用JSON其實經濟地多。而Fortify公司所作的示範,就是在Ajax架構下,利用JSON陣列,發動JavaScript Hijacking攻擊。

  實現JavaScript Hijacking的具體方式
  事實上,JavaScript Hijacking並不會對傳統形式的網站造成危害,它只能針對那些以JavaScript傳遞資料的網站產生威脅。要實現這種攻擊,需要受害網站、惡意網站、以及使用者瀏覽器等三方同時搭配,竊取資料的過程中也不需要入侵受害網站,或是在受害網站中植入任何的程式碼。
  它與CSRF的運作模式類似。要完成JavaScript Hijacking,首先使用者瀏覽器要登入受害網站,登入並且取得cookie。此時,要是使用者又開了另一個瀏覽視窗,並且瀏覽到含有JavaScript Hijacking劫持攻擊的惡意網站(或是被插入惡意程式碼的網站),就可能因為執行惡意網站上面的JavaScript程式,進而將個人資料由受害網站傳送到惡意網站指定的地方。若是CSRF攻擊,則是指使瀏覽器傳送假造的資料。總而言之,JavaScript Hijacking是利用弱點「偷取資料」,而CSRF攻擊則是利用弱點「傳送假造資料」。
  目前在網路上面找到的JavaScript Hijacking的攻擊程式大多利用覆寫 JavaScript 內建 Object 類別的建構子內容來達成。也就是說,當瀏覽器執行惡意網站上面的JavaScript程式時,會在登入受害網站的情況之下,呼叫惡意網站上面被覆寫過的程式碼。實際JavaScript Hijacking的概念驗證程式碼(Proof of Concept)可以在Fortify的技術文件中找到。

  避免此類攻擊的方法
  防制JavaScript Hijacking的方法目前有幾種:

  一、在資料傳遞時,將cookie或是某些特別的欄位加入。因為惡意網站無法假造這種請求。

  二、 檢查 HTTP表頭中的Referer欄位,我們可以知道是否是來自相同網域的請求。但是由於Referer可以經由一些方法變造,所以不是一個很保險的作法。你可以參考http://webappsec.org/lists/websecurity/archive/2006-07/msg00069.html

  三、因為惡意網站使用<script>標籤來實行跨站攻擊,而<script> 只會產生HTTP GET請求,因此可以在伺服端設下限制,只回應HTTP POST的請求。

  四、伺服器將傳回的JSON資料加以變造,使得JavaScript沒辦法直接執行。例如在JSON資料前後加上注釋符號,便可令 JavaScript 視之為一般注釋,而不加以執行,如此便不會喚起 Hijacking 程式碼。

  五、 採用XML來傳遞資料,而非使用JSON。
隨著Web 2.0的網站越來越多,這種利用Ajax架構下弱點的攻擊,也會持續浮出水面。除了網站管理者要注意,所有上網的使用者也要小心。

------

iT邦幫忙•發問、回答、分享•http://ithelp.ithome.com.tw

回 · 網際網路安全問題 這一篇文章封面


本文張貼者:校校鴿〔張貼時間:民國97年12月5日(星期五)13點37分〕 | 寫信給校校鴿

部落格首頁


學習的故鄉首頁
本站公告:〔您越需要我們,我們就越有創意〕 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」
〔為了讓我們有乾淨的學習環境,請勿任意在本站散播商業廣告與不合法文件或聯結〕:本站宣示