📅  最后修改于: 2023-12-03 15:08:32.728000             🧑  作者: Mango
在 Laravel 应用程序中使用 AJAX 需要考虑到安全性问题,其中一个关键点是需要包含 CSRF 令牌。本文将介绍如何在 AJAX 中传递令牌。
CSRF(Cross-site request forgery)跨站请求伪造是一种攻击方式。攻击者在某个网站上设置好钓鱼网站,诱骗用户输入信息并完成操作,这时攻击者就可以利用跨站请求伪造向网站发起请求,进行一些非法操作。为了避免这种情况,Laravel 支持为每个 POST 请求生成一个随机 CSRF token。
在 Laravel 5.5 以后,可以通过 @csrf
Blade 指令生成 CSRF 令牌。在表单中加入 @csrf
即可。
<form method="POST" action="/example">
@csrf
...
</form>
使用 jQuery 的 AJAX 请求时,可以将令牌设置在 headers
中。
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
在 Laravel 项目中,可以在 head
标签中设置 csrf-token
。
<head>
<meta name="csrf-token" content="{{ csrf_token() }}">
...
</head>
在 AJAX 请求中,需要以 POST 方式传递数据。可以将数据封装成对象,并使用 JSON.stringify()
转换为字符串。
$.ajax({
type: 'POST',
url: '/example',
data: JSON.stringify({ 'param1': 'value1', 'param2': 'value2' }),
contentType: "application/json; charset=utf-8",
dataType: 'json',
success: function (data) {
console.log(data);
},
error: function (xhr, status, error) {
console.log(xhr.responseText);
}
});
使用 AJAX 请求时,需要保证请求的安全性,其中一个关键点就是需要包含 CSRF 令牌。在 Laravel 项目中,可以通过 @csrf
Blade 指令生成令牌,并在 head
标签中设置 csrf-token
。在 AJAX 请求中,可以将令牌设置在 headers
中,并以 POST 方式传递数据,同时需要将数据转换为字符串。