CSRFToken確實(shí)會(huì)對(duì)網(wǎng)站安全起到一些積極作用,但我想討論CSRFToken對(duì)于一個(gè)網(wǎng)站是否是必要的。例如如果已經(jīng)要求所有非冪等的請(qǐng)求都用POST方法提交,是否CSRFToken就不必要了呢?CSRF和CORS的關(guān)系又是怎樣的呢?感謝大家的回答,我已經(jīng)理解了這個(gè)問(wèn)題,我也驚訝于我對(duì)這個(gè)問(wèn)題的理解一直以來(lái)都是錯(cuò)誤的。但我覺(jué)得對(duì)于我的疑問(wèn),大家的回答都不是很恰當(dāng),因此我自己來(lái)回答一下這個(gè)問(wèn)題。我之前錯(cuò)誤的理解是「form和XHR發(fā)起的POST請(qǐng)求都受到CORS的限制,因此只要非冪等請(qǐng)求不是GET,就可以防范CSRF」,而我今天才發(fā)現(xiàn),原來(lái)form發(fā)起的POST請(qǐng)求并不受到CORS的限制,因此可以任意地使用其他域的Cookie向其他域發(fā)送POST請(qǐng)求,形成CSRF攻擊。我還針對(duì)這個(gè)問(wèn)題請(qǐng)教了@c4605,他對(duì)防御CSRF提出了兩種解決方案:在每個(gè)表單中包含一個(gè)CSRFToken.不將用于認(rèn)證的Token或SeesionID儲(chǔ)存在Cookie中,而是將其儲(chǔ)存在localStorage中,在每次發(fā)起請(qǐng)求時(shí)手動(dòng)將Token添加到請(qǐng)求中。其中我比較偏好第二種解決方案,似乎各位并沒(méi)有提到,因此在這里與大家分享一下。補(bǔ)充一份資料:http://www.jongleberry.com/understanding-csrf.html
CSRF Token 的設(shè)計(jì)是否有其必要性?
DIEA
2019-04-13 08:46:29