防伪令牌作为 header 字段或作为 AJAX 上的 Post 值?

Anti forgery token as header field or as Post value on AJAX?

我现在正致力于 Ring Anti Forgery 以防止网站受到 CSRF 攻击。现在我怀疑我是否应该将令牌作为 header 字段或 post 值传递给 AJAX 请求,因为它们似乎都有效。

文档上写着:

The middleware also looks for the token in the X-CSRF-Token and X-XSRF-Token header fields, which are commonly used in AJAX requests.

在我这边将其设置为 header 字段的缺点是我必须将每个 Jquery $.post 更改为简单的 $.ajax 以便我可以设置headers.

例如

$.ajax({
  url: "url",
  type: "post",
  data: {
    username: username, 
    sender: sender
  },
  headers: {
    "X-CSRF-Token": X_CSRF_Token,   
  }
});

对比

$.post( "url", { username: username, sender: sender, '__anti-forgery-token': X_CSRF_Token})
  .done(function( data ) {
  // done
});

我是否需要将每个 jQuery $.post 更改为 $.ajax 以便我可以将防伪标记设置为 header 字段?

您可以使用$.ajaxSetup to set the CSRF token at every ajax call: https://gist.github.com/alanhamlett/6316427