XSS 與 CSRF 跨站攻擊

先作個名詞解釋:php

XSS:跨站腳本(Cross-site scripting)html

CSRF:跨站請求僞造(Cross-site request forgery)web

看了估計也不清楚什麼意思吧?數據庫

那麼,詳細解釋下:windows

XSS: 其實就是Html的注入問題,攻擊者的輸入沒有通過嚴格的控制進入了數據庫,最終顯示給來訪的用戶,致使能夠在來訪用戶的瀏覽器裏以瀏覽用戶的身份執行Html代碼。瀏覽器

一個例子:某文章的評論區,某個攻擊者輸入一段js代碼做爲評論:windows.alert("我是攻擊者"); , 這段評論提交以後,服務端沒有通過嚴格校驗,就直接入庫,下次有用戶瀏覽這個文章時,這段評論會加載並做爲html、js被瀏覽器解釋執行,而後,用戶就看到了「我是攻擊者」的彈窗了。安全

以上是一個無惡意的攻擊例子,若是攻擊者有惡意的話。。。獲取你的cookie,使用cookie登陸你的帳戶,轉帳。。cookie

 

CSRF:主要利用用戶瀏覽器的cookie來進行的攻擊行爲。xss

假設有惡意網站X,頁面上有這麼一段代碼:工具

<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

這段代碼會嘗試從mybank中,往個人帳戶轉帳1000元。這個行爲大部分狀況會失敗,由於這個轉帳接口是須要登陸後的受權信息的。可是,

若是用戶先登陸了mybank, 而後不當心(好比在qq收到鏈接並點擊了)打開惡意網站X,那麼,這個攻擊就生效了。登陸mybank後,會產生mybank的受權cookie, 網站X請求mybank時,瀏覽器會帶上受權cookie,致使被攻擊。

 

如何防護

xss相對比較好防護,只要對輸入進行過濾便可,如今不少webframework都提供了輸入校驗和xss過濾工具

csrf就不是那麼好防護了。它是請求僞造,服務端要識別出這個是僞造的請求是有難度的,這個大概有幾個防範思路

一、提升僞造的難度,好比不要隨便經過HTTP GET來提交、操做數據,GET太容易被攻擊了。GET方式的url能夠輕易被各類途徑傳播。

二、服務端增長請求令牌, 這個令牌不寫入cookie,每次返回給用戶的頁面帶有這個隨機生成的令牌,用戶提交數據時,這個令牌做爲隱藏域也一同提交,只有驗證令牌一致,纔可提交成功。嗯,增長了破解難度,但也不是沒法破解,能夠經過獲取htm代碼的方式獲取令牌。

三、使用驗證碼, 這個方式比較安全了, 複雜的驗證碼不是那麼容易破解的,有時候連人本身都認不出來。因此一樣的,這種方式也給了用戶很是很差的使用體驗,慎重使用。

四、增長referer來源頁判斷,能夠防一些小白(其實不少攻擊者都是小白,從這點上看,仍是頗有效的)。 

相關文章
相關標籤/搜索