Laravel文档梳理3、CSRF保护

前言:Laravel文档梳理,仅作为记录后看,无关其他。


1、Laravel是如何规避跨站伪造请求的?
生成CSRF token,验证用户是否为实际的发出者用户。

2、如何生成CSRF token
<?php echo csrf_field(); ?>

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

也可以在blade模板中使用:
{{ csrf_field() }}

3、通常我们不需要验证这个token,那么,它是怎么实现的?
VerifyCsrfToken中间件,会自动验证请求与session中的token是否一致。

4、如果有些路由你不想被CSRF保护,怎么设置?
在VerifyCsrfToken中间件中,添加$expect属性,排除URI
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier
{
    /**
     * URIs 应被 CSRF 验证执行。
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
    ];
}

5、VerfifyCsrfToken只会检查post提交的参数方式么?还有哪种也会检查?
标头中的X-CSRF-TOKEN。比如如下:
<meta name="csrf-token" content="{{ csrf_token() }}">

这种情况,通常ajax处理会用到:
$.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
});

6、Laravel还会在哪里保存CSRF TOKEN?
XSRF-TOKEN cookie中

Ps:你也可以使用cookie值来设置X-XSRF-TOKEN请求标头

7、为什么要进行请求方法伪造?
因为html表单中没有支持put  patch 或 delete的动作,如果你非要使用这几种请求方法,那就必须伪造。

8、举例说明请求方法伪造实例
<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

也可以使用辅助函数:
<?php echo method_field('PUT'); ?>

在blade模板引擎中:
{{ method_field('PUT') }}


9、抛出404错误的方法
方法一:辅助函数  abort(404)
方法二:手动抛出 Symfony\Component\HttpFoundation\Exception\HttpException

Ps: 辅助函数只是简单地抛出一个带有指定状态码的 
Symfony\Component\HttpKernel\Exception\NotFoundHttpException
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值