将 csrf 令牌存储在元标记中是一种好习惯吗?

Is it a good practice to store the csrf token in meta tag?

如果我在不使用表单的情况下发出 POST 请求并希望防止 CSRF 攻击,我可以做的是在元标记中设置 csrf-token 并将其放回 header 当请求被触发时。这是一个好习惯吗?

<meta name="csrf-token" content="xxx">

通过 header 放回令牌,例如使用 JQuery:

$.ajaxSetup({
   headers: {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
   }
});

是的,如果您使用 AJAX,这是一个很好的做法。你也可以把令牌放在表单里面(如果提交整个表单会更方便),但是如果你使用AJAX,它只需要去某个地方抓住它。

隐藏字段或元标记内都是很好的选择。