天天看點

Web 應用中CSRF與XSS的關系與預防

在Web應用開發中我們還必須得熟系頁面被攻擊的方式CSRF和XSS,以下先隻是簡單的介紹一下兩者的各自含義及表現形式,希望對你的了解有所幫助:

一、CSRF - 跨站僞造請求

1.CSRF跨站僞造請求,也被稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點内的信任使用者,而CSRF則通過僞裝來自受信任使用者的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(是以對其進行防範的資源也相當稀少)和難以防範,是以被認為比XSS更具危險性。

2. 攻擊通過在授權使用者通路的頁面中包含連結或者腳本的方式工作。

試想:一個網站使用者Bob可能正在浏覽聊天論壇,而同時另一個使用者Alice也在此論壇中,并且後者剛剛釋出了一個具有Bob銀行連結的圖檔消息。設想一下,Alice編寫了一個在Bob的銀行站點上進行取款的form送出的連結,并将此連結作為圖檔src。如果Bob的銀行在cookie中儲存他的授權資訊,并且此cookie沒有過期,那麼當Bob的浏覽器嘗試裝載圖檔時将送出這個取款form和他的cookie,這樣在沒經Bob同意的情況下便授權了這次事務。

CSRF是一種依賴web浏覽器的、被混淆過的代理人攻擊(deputy attack)。在上面銀行示例中的代理人是Bob的web浏覽器,它被混淆後誤将Bob的授權直接交給了Alice使用。

3. 下面是CSRF的常見特性:

依靠使用者辨別危害網站

利用網站對使用者辨別的信任

欺騙使用者的浏覽器發送HTTP請求給目标站點

另外可以通過IMG标簽會觸發一個GET請求,可以利用它來實作CSRF攻擊

4. 對于web開發者,怎樣防範跨站請求僞造呢?

對于web站點,将持久化的授權方法(例如cookie或者HTTP授權)切換為瞬時的授權方法(在每個form中提供隐藏field),這将幫助網站防止這些攻擊。一種類似的方式是在form中包含秘密資訊、使用者指定的代号作為cookie之外的驗證。

另一個可選的方法是“雙送出”cookie。此方法隻工作于Ajax請求,但它能夠作為無需改變大量form的全局修正方法。如果某個授權的cookie在form post之前正被JavaScript代碼讀取,那麼限制跨域規則将被應用。如果伺服器需要在Post請求體或者URL中包含授權cookie的請求,那麼這個請求必須來自于受信任的域,因為其它域是不能從信任域讀取cookie的。

與通常的信任想法相反,使用Post代替Get方法并不能提供卓有成效的保護。因為JavaScript能使用僞造的POST請求。盡管如此,那些導緻對安全産生“副作用”的請求應該總使用Post方式發送。Post方式不會在web伺服器和代理伺服器日志中留下資料尾巴,然而Get方式卻會留下資料尾巴。

盡管CSRF是web應用的基本問題,而不是使用者的問題,但使用者能夠在缺乏安全設計的網站上保護他們的帳戶:通過在浏覽其它站點前登出站點或者在浏覽器會話結束後清理浏覽器的cookie。

二、XSS-跨站腳本攻擊

那麼XSS是什麼呢?又有哪些危害呢?

1. 跨站腳本攻擊(Cross Site Scripting),為了不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故将跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面裡插入惡意Script代碼,當使用者浏覽該頁之時,嵌入其中Web裡面的Script代碼會被執行,進而達到惡意攻擊使用者的目的。

2.XSS攻擊分成兩類,一類是來自内部的攻擊,主要指的是利用程式自身的漏洞,構造跨站語句,如:dvbbs的showerror.asp存在的跨站漏洞。

另一類則是來自外部的攻擊,主要指的自己構造XSS跨站漏洞網頁或者尋找非目标機以外的有跨站漏洞的網頁。如當我們要滲透一個站點,我們自己構造一個有跨站漏洞的網頁,然後構造跨站語句,通過結合其它技術,如社會工程學等,欺騙目标伺服器的管理者打開。

XSS分為:存儲型和反射型

存儲型XSS:存儲型XSS,持久化,代碼是存儲在伺服器中的,如在個人資訊或發表文章等地方,加入代碼,如果沒有過濾或過濾不嚴,那麼這些代碼将儲存到伺服器中,使用者通路該頁面的時候觸發代碼執行。這種XSS比較危險,容易造成蠕蟲,盜竊cookie(雖然還有種DOM型XSS,但是也還是包括在存儲型XSS内)。

反射型XSS:非持久化,需要欺騙使用者自己去點選連結才能觸發XSS代碼(伺服器中沒有這樣的頁面和内容),一般容易出現在搜尋頁面。

3. XSS漏洞是Web應用程式中最常見的漏洞之一。如果您的站點沒有預防XSS漏洞的固定方法,那麼就存在XSS漏洞。這個利用XSS漏洞的病毒之是以具有重要意義是因為,通常難以看到XSS漏洞的威脅,而該病毒則将其發揮得淋漓盡緻。

總結:

我們在web開發過程中,需要同時注意上面的兩種風險防範。通常XSS更普遍,也更容易防範。CSRF相對不容易防範,在未來網站開發過程中也更加重要。

繼續閱讀