前置基礎(chǔ):
1较解,瀏覽器會自動帶上cookie畜疾,但是不會自動帶上token。
2印衔,cookie其實是服務(wù)的產(chǎn)生的sessionId啡捶。
3,token需要開發(fā)者手動塞進(jìn)請求頭中奸焙。
4瞎暑,跨站請求偽造:CSRF(Cross-site request forgery)
cookie保證了用戶可以處于登錄態(tài),但是B網(wǎng)站拿不到cookie
所以如何防CSRF攻擊:
1与帆,服務(wù)端產(chǎn)生一個token了赌,發(fā)送給客戶端。
2玄糟,客戶端由開發(fā)者主動塞進(jìn)head中(或作為param也沒問題)勿她,而不是瀏覽器自動帶上。
3阵翎,服務(wù)端拿到token參數(shù)后做校驗逢并。不合法的token請求被拒絕播揪。
還有一種辦法,通過head里的referer:
1筒狠,舉例:百度的服務(wù)器上有一張圖片猪狈。www.baidu.com/path/picture.jpg
2,在我自己的網(wǎng)站www.custom.com/path/home.html中辩恼,引用了這個圖片的url雇庙。
3,百度服務(wù)器在收到圖片請求頭中根據(jù)Referer灶伊,能知道是張三的網(wǎng)頁疆前,還是李四的網(wǎng)頁在請求
4,可以用來做引流統(tǒng)計聘萨。還可以用來做防盜鏈竹椒。如果請求是來自李四的,就拒絕米辐。
接著說“跨域腳本攻擊”:XSS(Cross Site Scripting)
1胸完,不需要任何的登錄認(rèn)證
2,它會通過合法的操作(比如在url中輸入翘贮、在評論框中輸入)赊窥,向你的頁面注入腳本。
比如搜索輸入框中狸页。輸入“<script>alert(1)</script>”锨能。
如何防范呢:
1,URL的編碼處理芍耘。比如字符“var a = 5”,編碼后就是純文本址遇,不編碼就會被瀏覽器解析成一個變量賦值
2,移除用戶輸入的Style節(jié)點斋竞、Script節(jié)點倔约、Iframe節(jié)點等過濾。(白名單)
最后要回答本篇貼的問題了窃页。為什么CSRF只劫持cookie跺株,不劫持token
因為,跨域請求偽造脖卖,要的就是cookie乒省,來偽裝B網(wǎng)站的身份,讓服務(wù)器以為是A畦木。
舉例:
cookie:用戶點擊了鏈接袖扛,cookie未失效,導(dǎo)致發(fā)起請求后后端以為是用戶正常操作,于是進(jìn)行扣款操作蛆封。
token:用戶點擊鏈接唇礁,由于瀏覽器不會自動帶上token,所以即使發(fā)了請求惨篱,后端的token驗證不會通過盏筐,所以不會進(jìn)行扣款操作。
但是對于XSS攻擊來說砸讳,這2種方式的防反琢融,都沒什么用。因為攻擊者不通過cookie和token來攻擊簿寂。而是通過注入腳本