CORS和CSRF
什么是CORS?
CORS是一個W3C標准,全稱是"跨域資源共享",他允許瀏覽器向誇源服務器,發出XMLHTTPRequest請求,從而克服了AJAX只能同源使用的限制.
什么是CSRF?
名為跨站請求偽造,指攻擊者盜用了你的身份,以你的名義發送惡意請求,CSRF主流防御方式是在后端生成表單的時候生成遺傳隨機token,內置到表單里成為一個字段,同時,將此串token置入session中.每次表單提交到后端時都會檢查這兩個值是否一致,以此來判斷此次表單提交是否是可信的.提交過一次之后,如果這個頁面沒有生成CSRF token,那么token將會被清空,如果有新的需求,那么token會被更新.
攻擊者可以偽造POST表單提交,但是他沒有后端生成的內置於表單的token,session中沒有token都無濟於事.
如何去解決CSRF跨域請求偽造問題?
防止CSRF攻擊的步驟
- 在客戶端向后端服務器請求頁面數據時, 后端會在響應的token中設置csrf_token的值
- 在前端的From表單中也添加了一個隱藏的字段, 這個字段的值也是csrf_token
- 在用戶點擊提交的時候, 會帶上表單中的csrf_token和cookie中的csrf_token一起發送到后端服務器
- 后端服務器接收前端發送過來的請求
- 從cookie中取出csrf_token
- 從From表單中取出隱藏的csrf_token值
- 對這兩個token值進行對比
- 如果比對之后這連個值一樣, 則表示這個是正常的請求, 如果對比之后發現這兩個值不一樣, 則說明這個是不正常的請求, 服務器端不需要做處理