csrf(cross-site request forgery),跨站請求偽造
亦稱為:one click attack/session riding,縮寫為:csrf/xsrf。
csrf,首先要獲取站點使用者登入資訊,然後冒充正常使用者登入,進行破壞活動,受害方為正常使用者和站點。
攻擊型別:顯示攻擊 / 隱式攻擊
csrf攻擊無法完全防範,只能提高攻擊的門檻。方法比如:
改良站內 api 的設計
對於發布帖子這一類建立資源的操作,應該只接受 post 請求,而 get 請求應該只瀏覽而不改變伺服器端資源。
最理想的做法是使用restful風格的 api 設計,get、post、put、delete 四種方法對應資源的讀取、建立、更新、刪除操作。現在的瀏覽器基本不支援在表單中使用 put 和 delete 請求方法,我們可以使用 ajax 提交請求,也可以使用隱藏域指定請求方法,然後用 post 模擬 put 和 delete。
這樣,不同的資源操作區分的非常清楚,集中處理非 get 型別的請求即可。
檢測http的頭資訊refer
驗證碼csrf token,請求令牌
token 使用原則
token要足夠隨機————只有這樣才算不可**
token是一次性的,即每次請求成功後要更新token————這樣可以增加攻擊難度,增加**難度
token要注意保密性————敏感操作使用post,防止token出現在url中
在表單中加入隱藏域,提交token,然後在後端進行驗證token是否正確,注意,在驗證後,token就應該被銷毀
csrf 主流防禦方式是在後端生成表單的時候生成一串隨機 token ,內建到表單成為乙個字段,同時,將此串 token 置入 session 中。每次表單提交到後端時都會檢查這兩個值是否一致,以此來判斷此次表單提交是否是可信的。提交過一次之後,如果這個頁面沒有生成 csrf token ,那麼 token 將會被清空,如果有新的需求,那麼 token 會被更新。
alas, the final solution is using csrf tokens. how do csrf tokens work?
server sends the client a token.
client submits a form with the token.
the server rejects the request if the token is invalid
與xss的聯絡和區別:
聯絡 csrf可以利用xss實現更有用的攻擊。
xss是跨站指令碼,是實現csrf的一種方式,是在站點的輸入域執行指令碼攻擊,那麼站點就需要對輸入域的字段進行過濾。
區別 csrf不是xss的子類,他們的本質問題不一樣。xss本質是服務端對輸入過濾不嚴而後輸出的時候將客戶端的指令碼再輸出。
csrf是服務端對使用者的身份認證不嚴格(cookie等),使得攻擊者冒充使用者達到攻擊目的。
防禦csrf的前提是防禦xss
最後:做好防禦,前提是清楚要保護的物件,是那些直接產生資料變化的服務,而對於get操作來說,則不需要,post,update,delete操作等需要進行防禦。
CSRF 攻擊是什麼?如何防範?
csrf cross site request forgery 也被稱為 one click attack或者 session riding,中文全稱是叫跨站請求偽造。一般來說,攻擊者通過偽造使用者的瀏覽器的請求,向訪問乙個使用者自己曾經認證訪問過的 傳送出去,使目標 接收並誤以為是使用者的真實操作...
CSRF 攻擊的原理和防範措施
使用者c訪問正常 a時進行登入,瀏覽器儲存a的cookie 而攻擊 b在訪問 a的時候,瀏覽器會自動帶上 a的cookie 所以 a在接收到請求之後可判斷當前使用者是登入狀態,所以根據使用者的許可權做具體的操作邏輯,造成 攻擊成功 在指定表單或者請求頭的裡面新增乙個隨機值做為引數 在響應的cooki...
關於防範csrf攻擊基於token鑑權
在web開發中,之前都使用cookie session方式來實現身份認證鑑權。但是現在前後端分離,以及終端有可能不支援cookie的情況下,一般都採用token方式。現在系統設計思路如下 服務端會生成兩個token,乙個是認證請求token accesstoken 乙個是重新整理token refr...