在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  HTML/ restful跨域情況下客戶端首次請求如何獲取csrf token?

restful跨域情況下客戶端首次請求如何獲取csrf token?

根據(jù)eggjs的官方文檔:

在 CSRF 默認(rèn)配置下,token 會被設(shè)置在 Cookie 中,在 AJAX 請求的時(shí)候,可以從 Cookie 中取到 token,放置到 query、body 或者 header 中發(fā)送給服務(wù)端。

In jQuery:

var csrftoken = Cookies.get('csrfToken');

function csrfSafeMethod(method) {
  // these HTTP methods do not require CSRF protection
  return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
  beforeSend: function(xhr, settings) {
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
      xhr.setRequestHeader('x-csrf-token', csrftoken);
    }
  },
});

restful并且跨域的情況下,請求的頁面文件并不會經(jīng)過eggjs服務(wù)器,因此也不會在cookie中種上csrf token,當(dāng)首次請求為post(例如登陸),此時(shí)客戶端cookie中還沒有csrf token因此請求肯定會失敗,再次發(fā)起請求后才能讀取到cookie中的csrf token,怎么解決這個(gè)問題?

補(bǔ)充:基于token驗(yàn)證的restful是不是沒有csrf風(fēng)險(xiǎn)了?

回答
編輯回答
旖襯

csrf token 只能由服務(wù)器端返回,通過csrf 白名單吧

2018年1月17日 10:13