1. 程式人生 > >XSS和CSRF

XSS和CSRF

XSS原理:

跨站指令碼攻擊XSS(Cross Site Scripting)攻擊是指攻擊者往Web頁面裡面插入惡意html標籤或者javascript程式碼。比如攻擊者在論壇中放一個看似安全的連結,騙取使用者點選後,竊取cookie中的使用者私密資訊;或者攻擊者在論壇中加一個惡意表單當用戶提交表單的時候卻把傳送到攻擊者的伺服器中,而不是使用者原本以為的目標站點。

XSS防範方法:

首先程式碼裡對使用者輸入的大方和變數都需要仔細檢查長度和對''<",">",";"," ' "等字元做過濾;其次任何內容寫到頁面之前都必須加以encode,避免不小心把html tag弄出來。這個層面做好至少可以堵住超過一半的XSS攻擊。首先,避免直接在cookie中洩露使用者隱私,例如email、密碼等等。

其次,通過cookie和系統ip繫結來降低cookie洩露後的風險。這樣攻擊者得到cookie沒有實際價值,不可能拿來重放。

儘量使用POST而不是GET傳輸資料。

CSRF原理:

CSRF(Cross-site request forgery)跨站請求偽造,也稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站指令碼(XSS),但它與XSS非常不同,XSS利用站點內的信任使用者,而CSRF則通過偽裝來自授信使用者的請求來利用受信任的網站。與XSS公家相比,CSRF攻擊往往不太流行(因此對齊進行防範的資源相對稀少)和難以防範,所以被認為比XSS更具有危險性。

CSRF防範措施:

對於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。

CSRF影響因素:

CSRF攻擊依賴下面的假定:

攻擊者瞭解受害者所在的站點

攻擊者的目標站點具有持久化授權cookie或者受害者具有當前會話cookie

目標站點沒有對使用者在網站行為的第二授權