由於http協議是無狀態的,所有客戶端和伺服器端的資料交換和鑑權資訊都必須附帶在http請求中。
通常情況下,將鑑權資訊放在cookie裡已經足夠。瀏覽器發起請求的時,會自動帶上對應網域名稱的cookie,伺服器端接收到cookie後,就可以準確的判斷是誰在發起請求。
但是當攻擊者利用這套機制時,通過在a**嵌入b**的請求,當使用者訪問a**時,被強制發起了b**的鏈結的請求。如果這個請求涉及到增刪改的場景,那麼使用者的個人資料將會被修改掉。更進一步,如果這個請求的引數中即包含有所有的待修改資訊(比如通過乙個請求發起轉賬,收賬人和轉賬金額都在引數裡),那麼將導致嚴重的使用者損失。
上述攻擊方式被稱作csrf(cross-site request forgery),在web世界裡是和xss同等場景和頻發的問題。
乙個攻擊者需要怎樣的條件來發起csrf攻擊?
分兩種情況。方案一:例如有乙個請求為
get
。那麼很簡單,攻擊者在自己的**(
)裡插入一段**(例如
),那麼當攻擊者訪問
evil.html
的時候,就會把編碼123
的好友刪掉了。例如有乙個請求為
post
,post的資料為friendid: 123
。這個利用起來就稍微麻煩一點,直接將鏈結插入頁面中將會不可行,攻擊者需要在
b.com
構造乙個form表單,當使用者訪問時,利用js自動提交請求即可。
string referer = request.getheader("referer");
if (referer == null || securityutil.parseurl(referer) == null)
方案二:
本專案中採用了方案一: 請求使用 post 請求,通過過濾器拿到需要校驗的 url 路徑,在過濾器中對該請求的 referer 進行校驗,判斷該referer 的 host 是不是當前專案的網域名稱。
關於 CSRF漏洞
驗證 http協議的請求頭中的 referer值,它記錄了 http請求的 位址,在通常情況該位址是同乙個 位址,而大部分 csrf攻擊是在其它 發起的所以 referer位址也是發起方位址,所以可以做判斷同乙個位址請求通過否則拒絕,或需要允許其它發起位址可以做白名單.不過事實上,一些瀏覽器黑客可以...
CSRF漏洞簡介
一 概述 跨站請求偽造 cross site request forgery 也被稱為 one click attack 或者 session riding,通常縮寫為 csrf 或者 xsrf,是一種挾制使用者在當前已登入的web應用程式上執行非本意的操作的攻擊方法。跟跨 指令碼 xss 相比,x...
WEB漏洞 CSRF及SSRF漏洞
cross site request forgery 簡稱為 csrf 在csrf的攻擊場景中攻擊者會偽造乙個請求 這個請求一般是乙個鏈結 然後欺騙目標使用者進行點選,使用者一旦點選了這個請求,整個攻擊就完成了。所以csrf攻擊也成為 one click 攻擊。很多人搞不清楚csrf的概念,甚至有時...