困擾了一個晚上的csrf問題

昨天晚上偶然看到csrf這個問題,因此就去了解了一下csrf究竟是個什麼東西。
百度定義:html

CSRF(Cross-site request forgery)跨站請求僞造,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝成受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性

一個簡單的例子:瀏覽器

某網上商城獲取一個訂單詳情的接口是127.0.0.1/orders/orderId,而且須要認證事後才能訪問這個接口
口。小明是這個商城的一個用戶,已經經過了認證,而且是經過cookie實現認證的。如今一個黑客也想要訪問小
明在商城中某個訂單的詳情,他該怎麼作呢?很簡單,只要在某個地方發佈一個連接地址是 
127.0.0.1/orders/orderId這個接口,誘使小明去點擊這個連接發送請求。瀏覽器就會自動在這個請求上加上
以前認證過的cookie,而服務端是經過這個cookie驗證是否本人操做的,這樣黑客就在小明徹底不知情的狀況下 
 就獲得了這個訂單的詳情。這個接口的操做若是是 購買一個商品,刪除郵件的話,後果將很是可怕。

爲何會出現上面這種狀況呢?安全

由於cookie是在向這個網頁發送請求時自動攜帶的,而我昨天困擾的問題就是爲何token會比cookie安全。        
緣由其實就是token通常存在sessionStorage或localStorage中,而它不能在本站點以外的其餘站點獲取 
到,因此就算你在別處點擊了一個包含這個接口的連接也不會致使token泄露。

如何防範csrf攻擊?
1.儘可能使用POST,限制GETcookie

post相對get來講更安全,可是仍是能在連接中嵌套一個表單而後提交

2.設置瀏覽器cookie策略session

禁止在第三方網站上使用cookie

3.加驗證碼xss

每次發送重要請求都經過驗證碼和服務端進行認證,這也很是安全,可是用戶體驗很差,重要的操做能夠這也,但你不能關注一個用戶或者發佈一個帖子也須要認證一次吧。

4.增長referer請求頭檢查post

referer請求頭的值就是請求來源的地方,服務端能夠經過判斷這個來源去分辨是否時csrf攻擊,可是一些黑客仍是能經過一些技術很容易的去更改這個請求頭的值

5.使用token網站

這是最廣泛的方法,每次發送請求都攜帶這個token,它與cookie不一樣的是,token能夠是無狀態的,即服務端能夠不用保存關於token的值,而是每次經過計算驗證這個token來判斷是不是當前用戶。

黑客還有沒有其餘方法能獲取到小明訂單的詳情?code

是能夠的。黑客能夠在商城一個商品的評價下面寫入一個js腳本而且經過圖片假裝起來,只要小明查看了這個評價,這個js腳本就會自動加載,黑客就能夠經過這個js腳本去獲取token值而且發送請求,由於當前js腳本是在本站內執行的,因此是能夠訪問到token。上面這個攻擊方式就是xss,經過在用戶訪問的頁面嵌入js代碼使用戶或服務端受到攻擊。

其實xss就是csrf的一種實現方式,xss的防範比較困難,由於黑客能夠經過不少方法在網頁中插入js或html代碼。能夠經過在cookie中設置了HttpOnly屬性,那麼經過js腳本將沒法讀取到cookie信息,這樣能有效的防止XSS攻擊。而關於xss防範又是另外一個話題了.....csrf

能夠簡單理解爲csrf是讓用戶在不知情的狀況,冒用其身份發起了一個請求,而xxs就是經過在網頁上插入js或html代碼發動攻擊

寫的比較亂,就是token和cookie這裏沒有理解透致使這麼久才搞懂這個問題。

相關文章
相關標籤/搜索