CSRF攻擊原理
CSRF:跨站請(qǐng)求偽造
- 用戶訪問(wèn)一個(gè)正常網(wǎng)站例如www.baidu.com
- 用戶又訪問(wèn)了攻擊者構(gòu)造的惡意網(wǎng)站
- 惡意網(wǎng)站可以讓用戶自動(dòng)提交一個(gè)請(qǐng)求到目標(biāo)網(wǎng)站(www.baidu.com)
- 提交請(qǐng)求的操作不是惡意網(wǎng)站發(fā)起的而是惡意網(wǎng)站讓用戶發(fā)起的
CSRF防御
CSRF能夠攻擊成功的原因在于重要操作的所有參數(shù)都是可以被攻擊者猜到的对蒲,攻擊者只有預(yù)測(cè)出惡意請(qǐng)求的URL的所有參數(shù),才能成功的構(gòu)造一個(gè)偽造的請(qǐng)求贡翘。比如時(shí)候他要?jiǎng)h除目標(biāo)網(wǎng)站上的一個(gè)文章蹈矮,攻擊者必須知道刪除操作的URL以及參數(shù)值
我們使用token來(lái)解決這個(gè)問(wèn)題:
http://host/path/delete?username=abc&item=123&token=[random(seed)]
我們?cè)趗rl后面加一個(gè)Token,這個(gè)Token必須是隨機(jī)的鸣驱,由于Token的存在泛鸟,攻擊者無(wú)法再構(gòu)造出一個(gè)完整的url來(lái)實(shí)施CSRF攻擊。Token需要同時(shí)存放在請(qǐng)求和session中踊东,當(dāng)請(qǐng)求提交時(shí)北滥,只需要驗(yàn)證請(qǐng)求中的token與用戶session中的token是否相同,如果不相同則認(rèn)為發(fā)生了CSRF攻擊