我从Laravel 5开始,我想做正确的事。 我正在做" Post"和Json一起,我想实施CSRF保护,但我不知道如何在我的JSON上做到这一点。 我用AJAX看了很多例子,但是用JSON我没找到。
我需要手动设置每个人或者laravel的标记吗?
如何在该JSON上传递令牌作为参数?
这是我的JSON:
{
"foo":"bar"
}
这是我的控制器代码:
public function Register()
{
$teste = Request::json()->all();
return $teste;
}
我在中间件上使用了Laravel的所有默认保护。
答案 0 :(得分:4)
我们也在Laravel应用中解决了这个问题。这就像做以下两件事一样简单。
首先,在您的页面上创建_token变量,您甚至可以将其放在基本布局视图模板中:
<script type="text/javascript">
var _token = '{{ csrf_token() }}';
</script>
然后,使其成为每个ajax请求在js应用程序代码的开头(或者在开始使用jquery使用ajax调用之前的任何地方)发布以下_token
变量:
$.ajaxSetup({
data: { _token: _token }
});
只要您的请求都没有使用_token
索引,您现在应该将csrf令牌添加到您在应用中发出的每个ajax请求中。
答案 1 :(得分:3)
无论是使用ajax还是正常发布,您始终都需要传递CSRF令牌。这基本上是一个安全功能。
Laravel自动生成它。
你需要创建&#34; _token&#34;您的页面上的变量,您也可以在主模板中创建一次变量,然后您可以在整个项目中访问它:
<script type="text/javascript">
var secure_token = '{{ csrf_token() }}';
</script>
现在您可以使用以下ajax调用中的数据发送令牌:
$.ajax({
data: { _token: secure_token }
});
如果您通过表单提交发布任何数据,可以将其发布为:
<input type="hidden" name="_token" value="{{ csrf_token() }}">
您应始终在项目中提交的每个ajax请求或表单提交中张贴CSRF令牌。
答案 2 :(得分:2)
从Laravel 5开始,默认的csrf中间件将检查名为_token
OR 的formdata字段是否为名为X-CSRF-Token
的请求标头。
如果您不发布表单数据(例如json或xml),那么标题是最简单的选项。
如果您使用的是jquery,则可以通过将以下脚本标记添加到始终加载的模板(例如layout.blade.php
)来为所有ajax请求设置它:
<script>
$(function(){
$.ajaxSetup({
headers:{'X-CSRF-Token': '{{ csrf_token() }}'}
});
});
</script>