csrf(cross-site request forgery)跨站請求偽造,也被稱為「one click attack」或者session riding,通常縮寫為csrf或者xsrf,是一種對**的惡意利用。儘管聽起來像跨站指令碼(xss),但它與xss非常不同,xss利用站點內的信任使用者,而csrf則通過偽裝來自受信任使用者的請求來利用受信任的**。與xss攻擊相比,csrf攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比xss更具危險性。
這裡舉乙個例子:
1.使用者小明登入了某銀行**a。
2.小明向好友轉了1000塊錢,假設轉錢的請求是: 其中money為金錢數額,to為要轉向的人的賬戶id,這裡是小明好友的賬戶id。
3.小明在保持銀行賬戶還在登入狀態的情況下,開啟了惡意**b(具體為什麼開啟,可能**b有一些比較吸引人的地方…)。
4.**b在被訪問的時候,頁面指令碼立即傳送乙個預先設定好的請求: 這時就會用小明身份向賬戶654321轉1000塊錢,小明莫名其妙就少了1000塊錢。
cookie是罪魁禍首,我們知道cookie儲存在瀏覽器的時候,只有本**可以訪問到,第三發**不訪問不了的,我們也沒有辦法訪問其他**的cookie的,這在一定程度上保證了cookie的安全性。
我們在瀏覽器上傳送http請求的時候,瀏覽器會把該網域名稱下的cookie帶上,一併發送到伺服器。那麼問題就來了,瀏覽器並不管當前傳送請求的是哪個**,是在哪個頁面上傳送的請求,只要你請求的網域名稱在瀏覽器裡儲存有cookie資訊,瀏覽器都會一併給你帶上。
我們再來看看小明的案例,下圖是小明案例的整個csrf攻擊的過程:
攻擊的條件有兩個:
1.小明處於登入狀態
2.小明訪問了惡意**b
小明在登入了銀行**a之後,**a會在瀏覽器寫入cookie資訊,以後的每次請求,都會帶上這些cookie資訊,來證明小明的身份。瀏覽器第一次傳送的轉賬請求是小明親自操作的,是合法的行為,而第二次傳送的轉賬請求,是惡意**傳送的,是非法的行為,但伺服器一直都認為是小明本人操作的,只是轉賬的物件不一樣,都認為是合法行為,所以兩次轉賬都成功了。
知道了csef的攻擊原理後,就可以做防範措施了。防範的原理很簡單,只要不單單驗證cookie資訊來確認身份和合法性就可以防範了。目前的防範思路主要有兩種:
1.驗證請求**,通過請求頭的referer或者origin欄位來判斷**。
2.生成隨機的token,在請求的時候帶上,在服務端驗證token。
CSRF攻擊原理
假設a.cn這個 是乙個xx管理系統,我只有這個系統的普通使用者的賬戶,這個賬戶功能很有限,沒有管理員賬戶的許可權大,只有管理員賬戶能新增其它的管理員賬戶,我在使用這個 的過程中發現這個 在新增管理員的時候沒有驗證碼或者token驗證,只需要輸入賬號和密碼就可以新增管理員了,這樣的話意味著可以被cs...
CSRF攻擊原理
跨站請求偽造和跨站請求保護的實現 圖中browse是瀏覽器,webservea是受信任 被攻擊 a,webserverb是惡意 攻擊 b 1.一開始使用者開啟瀏覽器,訪問受信任 a,輸入使用者名稱和密碼登入請求 a 2.a驗證驗證使用者資訊,使用者資訊通過驗證,a產生cookie資訊並返回給瀏覽器 ...
CSRF攻擊原理解析
csrf的英文全稱是cross site request forgery,字面上的意思是跨站點偽造請求 瀏覽器的安全缺陷 來自與頁面相同domain的檔案請求都會帶cookie,包括,flash,iframe 瀏覽器cookie缺陷 1。記憶體cookie,ie允許跨域訪問 2。設定 p3p頭,ie...