Laravel中CSRF的验证与取消验证

CSRF跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。


原理:Laravel为每个用户session生成了一个CSRGToken,该token用来验证登录用户和请求发起者是否是同一人,如果不是则请求失败。

一:CSRF验证

路由部分:

//CSRF
Route::group(['prefix'=>'Home/test'], function () {
    
    Route::match(['get'],'csrf1', 'Home\IndexController@csrf1');
    Route::match(['post'],'csrf2', 'Home\IndexController@csrf2') -> name('csrf2');

});

Controller写法:

   //csrf1展示表单
    public function csrf1(){
        return view('Home/test/csrf1');
    }
    //csrf2处理请求
    public function csrf2(){
        return '提交成功';
    }

视图写法:
\resources\views\Home\test\csrf1.blade.php

<form action="{{route('csrf2')}}" method="post">
	姓名:<input type="text" name="name" value="">

<input type="submit" name="">
</form>

浏览器访问:
在这里插入图片描述但是这样提交表单是会失败的,因为我们没有携带token
在这里插入图片描述
解决:

在表单中添加一个value为<?php echo csrf_token();?>的input,当然,在blade模板引擎中可以用{{}}简写

<form action="{{route('csrf2')}}" method="post">
	姓名:<input type="text" name="name" value="">
<input type="hidden" name="_token" value="{{csrf_token()}}">
<input type="submit" name="">
</form>

重新提交:

在这里插入图片描述同样的,上面的<input type="hidden" name="_token" value="{{csrf_token()}}">还可以继续简写,用一个函数来代替,当然这种方法没法做异步

<form action="{{route('csrf2')}}" method="post">
	姓名:<input type="text" name="name" value="">
{{csrf_field()}}
<input type="submit" name="">
</form>

在这里插入图片描述在这里插入图片描述

二:CSRF排除例外路由

可以到\app\Http\Middleware\VerifyCsrfToken.php中的$except属性数组中设置白名单,这样就能关闭指定对象的CSRF验证

在这里插入图片描述填写白名单:
在这里插入图片描述

视图:

<form action="{{route('csrf2')}}" method="post">
	姓名:<input type="text" name="name" value="">
<input type="submit" name="">
</form>

浏览器访问:
在这里插入图片描述

同时定义多规则时需要,分隔
在这里插入图片描述设置全部忽略只需要填*即可

protected $except = [
        //排除所有CSRF验证
        '*'
    ];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Laravel 进行邮箱验证可以通过以下步骤实现: 1. 在控制器定义验证规则: ```php $rules = [ 'email' => 'required|email|unique:users,email', ]; ``` 2. 在控制器引入 Validator 并使用 validate 方法进行验证: ```php use Illuminate\Support\Facades\Validator; $validator = Validator::make($request->all(), $rules); if ($validator->fails()) { return redirect()->back()->withErrors($validator); } // 验证通过,继续执行其他操作 ``` 3. 在表单添加邮箱输入框并设置 name 属性为 email: ```html <form action="/register" method="POST"> @csrf <label for="email">邮箱</label> <input type="email" name="email" id="email"> <button type="submit">注册</button> </form> ``` 4. 在邮箱验证邮件添加验证链接并发送给用户: ```php use Illuminate\Support\Facades\Mail; use App\Mail\VerificationEmail; Mail::to($user->email) ->send(new VerificationEmail($user->verification_token)); ``` 5. 创建 VerificationEmail 类并定义邮件内容及验证链接: ```php use Illuminate\Mail\Mailable; class VerificationEmail extends Mailable { public $verificationToken; public function __construct(string $verificationToken) { $this->verificationToken = $verificationToken; } public function build() { $url = route('verify-email', $this->verificationToken); return $this->view('emails.verification', ['url' => $url]); } } ``` 6. 创建邮箱验证路由并处理验证逻辑: ```php use App\Models\User; Route::get('/verify-email/{token}', function ($token) { $user = User::where('verification_token', $token)->first(); if (!$user) { abort(404); } $user->update(['verification_token' => null]); return view('emails.verification-success'); })->name('verify-email'); ``` 以上就是 Laravel 进行邮箱验证的基本步骤,具体实现可能会有所不同,但大致思路是相似的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Deeeelete

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值