Token陡蝇,就是令牌,最大的特點(diǎn)就是隨機(jī)性哮肚,不可預(yù)測登夫。一般黑客或軟件無法猜測出來。
那么允趟,Token有什么作用恼策?又是什么原理呢?
Token一般用在兩個(gè)地方:
- 防止表單重復(fù)提交潮剪、
- anti csrf攻擊(跨站點(diǎn)請(qǐng)求偽造)涣楷。
兩者在原理上都是通過session token來實(shí)現(xiàn)的。當(dāng)客戶端請(qǐng)求頁面時(shí)抗碰,服務(wù)器會(huì)生成一個(gè)隨機(jī)數(shù)Token狮斗,并且將Token放置到session當(dāng)中,然后將Token發(fā)給客戶端(一般通過構(gòu)造hidden表單)弧蝇。下次客戶端提交請(qǐng)求時(shí)碳褒,Token會(huì)隨著表單一起提交到服務(wù)器端。
然后看疗,如果應(yīng)用于“anti csrf攻擊”沙峻,則服務(wù)器端會(huì)對(duì)Token值進(jìn)行驗(yàn)證,判斷是否和session中的Token值相等两芳,若相等摔寨,則可以證明請(qǐng)求有效,不是偽造的怖辆。
不過是复,如果應(yīng)用于“防止表單重復(fù)提交”,服務(wù)器端第一次驗(yàn)證相同過后竖螃,會(huì)將session中的Token值更新下淑廊,若用戶重復(fù)提交,第二次的驗(yàn)證判斷將失敗斑鼻,因?yàn)橛脩籼峤坏谋韱沃械腡oken沒變蒋纬,但服務(wù)器端session中Token已經(jīng)改變了猎荠。
上面的session應(yīng)用相對(duì)安全坚弱,但也叫繁瑣蜀备,同時(shí)當(dāng)多頁面多請(qǐng)求時(shí),必須采用多Token同時(shí)生成的方法荒叶,這樣占用更多資源碾阁,執(zhí)行效率會(huì)降低。因此些楣,也可用cookie存儲(chǔ)驗(yàn)證信息的方法來代替session Token脂凶。比如,應(yīng)對(duì)“重復(fù)提交”時(shí)愁茁,當(dāng)?shù)谝淮翁峤缓蟊惆岩呀?jīng)提交的信息寫到cookie中蚕钦,當(dāng)?shù)诙翁峤粫r(shí),由于cookie已經(jīng)有提交記錄鹅很,因此第二次提交會(huì)失敗嘶居。
不過,cookie存儲(chǔ)有個(gè)致命弱點(diǎn)促煮,如果cookie被劫持(xss攻擊很容易得到用戶cookie)邮屁,那么又一次gameover。黑客將直接實(shí)現(xiàn)csrf攻擊菠齿。
所以佑吝,安全和高效相對(duì)的。具體問題具體對(duì)待吧绳匀。
此外芋忿,要避免“加token但不進(jìn)行校驗(yàn)”的情況,在session中增加了token襟士,但服務(wù)端沒有對(duì)token進(jìn)行驗(yàn)證盗飒,根本起不到防范的作用。
還需注意的是陋桂,對(duì)數(shù)據(jù)庫有改動(dòng)的增刪改操作逆趣,需要加token驗(yàn)證,對(duì)于查詢操作嗜历,一定不要加token宣渗,防止攻擊者通過查詢操作獲取token進(jìn)行csrf攻擊。但并不是這樣攻擊者就無法獲得token梨州,只是增大攻擊成本而已痕囱。
比較高級(jí)的參考這個(gè)文章:http://www.cnblogs.com/xiekeli/p/5607107.html