繁体   English   中英

Laravel使用CSRF保护发布JSON

[英]Laravel post JSON using CSRF Protection

我从Laravel 5开始,我想做正确的事。 我正在和Json一起做“Post”,我想实现CSRF保护,但我不知道如何在我的JSON上做到这一点。 我用AJAX看了很多例子,但是用JSON我没找到。

我需要手动设置人员或laravel的每个令牌自动执行吗?

如何在该JSON上传递令牌作为参数?

那是我的JSON:

{
   "foo":"bar"
}

那是我的控制器代码:

public function Register()
{
    $teste = Request::json()->all();
    return  $teste;    
}

我在中间件上使用Laravel的所有保护默认值。

我们也在Laravel应用程序中解决了这个问题。 这就像做以下两件事一样简单。

首先,在页面上创建_token变量,甚至可以将其放在基本布局视图模板中:

<script type="text/javascript">
    var _token = '{{ csrf_token() }}';
</script>

然后,使它成为每个ajax请求在js应用程序代码的开头(或者在开始使用jquery使用ajax调用之前的任何地方)使用以下内容发布_token变量:

$.ajaxSetup({
    data: { _token: _token }
});

只要您的请求都没有使用_token索引,您现在应该将csrf令牌添加到您在应用程序中创建的每个ajax请求中。

无论是使用ajax还是正常发布,您总是需要传递CSRF令牌。 这基本上是一个安全功能。

Laravel自动生成它。

您需要在页面上创建“_token”变量,您也可以在主模板中创建一次变量,然后您可以在整个项目中访问它:

<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令牌。

从Laravel 5开始,默认的csrf中间件将检查名为_token的formdata字段名为X-CSRF-Token的请求标头。

如果您不发布表单数据(例如json或xml),则标题是最简单的选项。

如果您使用的是jquery,则可以通过将以下脚本标记添加到始终加载的模板(例如layout.blade.php来为所有ajax请求设置它:

<script>
    $(function(){
        $.ajaxSetup({
            headers:{'X-CSRF-Token': '{{ csrf_token() }}'}
        });
    });
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM