`

laravel CSRF token使用方法

阅读更多

Laravel默认是开启了CSRF功能,需要关闭此功能有两种方法:

方法一

打开文件:app\Http\Kernel.php

把这行注释掉:

'App\Http\Middleware\VerifyCsrfToken'

 

方法二

打开文件:app\Http\Middleware\VerifyCsrfToken.php

修改为:

 
<?php namespace App\Http\Middleware;

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

class VerifyCsrfToken extends BaseVerifier {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 使用CSRF
        //return parent::handle($request, $next);
        // 禁用CSRF
        return $next($request);
    }

}
 

 

CSRF的使用有两种,一种是在HTML的代码中加入:

<input type="hidden" name="_token" value="{{ csrf_token() }}" />

另一种是使用cookie方式。

使用cookie方式,需要把app\Http\Middleware\VerifyCsrfToken.php修改为:

 
<?php namespace App\Http\Middleware;

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

class VerifyCsrfToken extends BaseVerifier {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return parent::addCookieToResponse($request, $next($request));
    }

}
 

使用cookie方式的CSRF,可以不用在每个页面都加入这个input的hidden标签。

 

当然,也可以对指定的表单提交方式使用CSRF,如:

 
<?php namespace App\Http\Middleware;

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

class VerifyCsrfToken extends BaseVerifier {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // Add this:
        if($request->method() == 'POST')
        {
            return $next($request);
        }
        
        if ($request->method() == 'GET' || $this->tokensMatch($request))
        {
            return $next($request);
        }
        throw new TokenMismatchException;
    }

}
 

只对GET的方式提交使用CSRF,对POST方式提交表单禁用CSRF

 

修改CSRF的cookie名称方法

通常使用CSRF时,会往浏览器写一个cookie,如:

要修改这个名称值,可以到打开这个文件:vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php

找到”XSRF-TOKEN“,修改它即可。

当然,你也可以在app\Http\Middleware\VerifyCsrfToken.php文件中,重写addCookieToResponse(...)方法做到。

分享到:
评论

相关推荐

    Laravel开发-laravel-token

    在Laravel中,可以使用`csrf_token()`函数来生成一个唯一的CSRF令牌,这个令牌通常插入到表单的隐藏字段中: ```blade &lt;input type="hidden" name="_token" value="{{ csrf_token() }}"&gt; ``` 三、表单提交 在...

    Laravel开发-cookie-csrf

    在Laravel中,可以使用`Cookie::make()`方法创建cookie,`Cookie::queue()`方法将cookie添加到响应中,而`Cookie::get()`则用于读取cookie值。同时,Laravel提供了cookie加密和安全性的内置支持,确保数据在传输过程...

    对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍

    Laravel的CSRF防御机制主要通过在用户的会话中生成一个随机的令牌(token),并将这个令牌与用户的会话关联起来。当用户访问Laravel应用时,Laravel框架会在用户的会话中存储一个唯一的令牌。当用户通过Laravel的...

    laravel 实现关闭CSRF(全部关闭、部分关闭)

    用了laravel就会知道其中的csrf验证功能,如果post传值的时候,没有csrf_token就会报如下的错误: 这是因5.2之后的版本中会默认在路由里面添加 web 中间件。 在app/Http/Kernel.php文件中有如下配置: 全部关闭 到...

    Laravel开发-token

    在Laravel中,`Illuminate\Support\Str`类提供了`random()`方法,用于生成随机字符串,这常用于创建Token。开发者可以选择指定长度和字符集来生成安全的随机字符串。 ### 8. Token失效时间 为了安全性,Token通常有...

    Laravel开发-token-verification

    `Laravel 开发 - token-verification` 包是为了加强和扩展 Laravel 的内置 CSRF 保护,提供更加灵活和强大的令牌验证机制。通过理解和利用这个包,开发者可以更好地保护他们的应用免受 CSRF 攻击,并且可以根据具体...

    laravel 5.5 关闭token的3种实现方式

    以上内容详细介绍了在Laravel 5.5中关闭Token的三种实现方式,包括全局关闭、全局设置例外和局部关闭的方法,以及它们的使用场景和安全考虑。希望本文的内容能为Laravel开发者提供一个有价值的参考,并帮助他们更好...

    Laravel开发-laravel-file-manager

    token: Laravel.csrfToken }; ``` 然后在需要使用富文本编辑器的视图中引入 Keccakier 和 LFM: ```html ('vendor/keccakier/keccakier.min.css') }}"&gt; ('vendor/keccakier/keccakier.min.js') }}"&gt; ('vendor/...

    Laravel5.3+框架定义API路径取消CSRF保护方法详解

    从Laravel 5.3+开始,API路径被...Any HTML forms pointing to POST, PUT, or DELETE routes that are defined in the web routes file should include a CSRF token field. Otherwise, the request will be rejected.

    Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)

    在 Laravel 中,CSRF 保护是通过 `VerifyCsrfToken` 中间件实现的,它会检查每个 POST、PUT、PATCH 和 DELETE 请求中的 `X-CSRF-TOKEN` 或 `X-XSRF-TOKEN` 头部。如果请求中未找到正确的令牌,或者令牌无效,中间件...

    Laravel开发-laravel-tokens

    6. **Refresh Tokens**: 在OAuth2和JWT中,通常会使用刷新令牌(refresh token)来换取新的访问令牌。当访问令牌过期时,用户无需重新登录,而是使用刷新令牌获取新的访问权限。 7. **Middleware**: Laravel 的...

    Laravel开发-laravel-utilities

    1. 辅助函数(Helpers):Laravel提供了大量的全局辅助函数,如`route()`, `url()`, `redirect()`, `csrf_token()`等,它们简化了常见的任务,如生成路由链接、URL、处理重定向和CSRF保护。 2. 服务提供者(Service...

    laravel框架中表单请求类型和CSRF防护实例分析

    Laravel框架是现代PHP开发中非常流行的一个全栈Web开发框架,它使用了MVC(Model-View-Controller)设计...这些教程能帮助开发者全面掌握Laravel框架的使用方法和最佳实践,从而编写出更加高效、安全的PHP应用程序。

    Laravel开发-laravel-helpers

    3. `csrf_token()`:获取CSRF(跨站请求伪造)令牌,用于保护表单提交的安全性。 4. `redirect()`:返回一个重定向响应,用于将用户导向其他页面。 其次,Laravel的Blade指令是模板引擎的一部分,允许开发者在视图...

    解决laravel 出现ajax请求419(unknown status)的问题

    方法一:去关掉laravel的csrf验证,但这个人不建议,方法也不写出来了。 方法二:把该接口写到api.php上就好了 方法三: 首先在页面加上 &lt;meta name=csrf-token content={{ csrf_token() }} /&gt; 然后请求的在...

    laravel5.1 ajax post 传值_token示例

    这样,每当你使用jQuery发起Ajax请求时,如使用`$.post()`方法,Laravel会自动地从Header中读取CSRF令牌值,无需你在每次请求中手动添加: ```javascript $.post('/your-endpoint', { // 你的数据对象 }).done...

    laravel-danmaku:DPlayer弹幕

    composer require moeplayer/laravel-danmaku使用publish命令将包迁移复制到本地迁移: php artisan vendor:publish --tag danmakuphp artisan migrate将danmakuv2添加到csrf白名单// app\...

    Laravel开发-laravel-tokens .zip

    在Laravel框架中,令牌(tokens)是一种常见的安全机制,用于处理不同的场景,如CSRF保护、API认证或无状态会话管理。本资源"Laravel开发-laravel-tokens .zip"可能包含关于如何在Laravel项目中使用和管理令牌的教程...

Global site tag (gtag.js) - Google Analytics