首页 > php教程 > php手册 > 正文

[PHP] - Laravel - CSRF token禁用方法

php中文网
发布: 2016-06-14 00:02:18
原创
864人浏览过

前文

csrf攻击和漏洞的参考文章:

http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

 

法语写作助手
法语写作助手

法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

法语写作助手 31
查看详情 法语写作助手

立即学习PHP免费学习笔记(深入)”;

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

 

立即学习PHP免费学习笔记(深入)”;


 

立即学习PHP免费学习笔记(深入)”;

方法一

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

把这行注释掉:

'App\Http\Middleware\VerifyCsrfToken'
登录后复制

 

立即学习PHP免费学习笔记(深入)”;

方法二

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

修改为:

<?<span style="color: #000000;">php namespace App\Http\Middleware;

</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> Closure;
</span><span style="color: #0000ff;">use</span> Illuminate\Foundation\Http\Middleware\VerifyCsrfToken <span style="color: #0000ff;">as</span><span style="color: #000000;"> BaseVerifier;

</span><span style="color: #0000ff;">class</span> VerifyCsrfToken <span style="color: #0000ff;">extends</span><span style="color: #000000;"> BaseVerifier {

    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     </span><span style="color: #008000;">*/</span>
    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> handle(<span style="color: #800080;">$request</span>, Closure <span style="color: #800080;">$next</span><span style="color: #000000;">)
    {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 使用CSRF
        //return parent::handle($request, $next);
        // 禁用CSRF</span>
        <span style="color: #0000ff;">return</span> <span style="color: #800080;">$next</span>(<span style="color: #800080;">$request</span><span style="color: #000000;">);
    }

}</span>
登录后复制

 

立即学习PHP免费学习笔记(深入)”;

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

<span style="color: #0000ff;"><</span><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="hidden"</span><span style="color: #ff0000;"> name</span><span style="color: #0000ff;">="_token"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="{{ csrf_token() }}"</span> <span style="color: #0000ff;">/></span>
登录后复制

另一种是使用cookie方式。

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

<?<span style="color: #000000;">php namespace App\Http\Middleware;

</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> Closure;
</span><span style="color: #0000ff;">use</span> Illuminate\Foundation\Http\Middleware\VerifyCsrfToken <span style="color: #0000ff;">as</span><span style="color: #000000;"> BaseVerifier;

</span><span style="color: #0000ff;">class</span> VerifyCsrfToken <span style="color: #0000ff;">extends</span><span style="color: #000000;"> BaseVerifier {

    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     </span><span style="color: #008000;">*/</span>
    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> handle(<span style="color: #800080;">$request</span>, Closure <span style="color: #800080;">$next</span><span style="color: #000000;">)
    {
        </span><span style="color: #0000ff;">return</span> parent::addCookieToResponse(<span style="color: #800080;">$request</span>, <span style="color: #800080;">$next</span>(<span style="color: #800080;">$request</span><span style="color: #000000;">));
    }

}</span>
登录后复制

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

 

立即学习PHP免费学习笔记(深入)”;

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

<?<span style="color: #000000;">php namespace App\Http\Middleware;

</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> Closure;
</span><span style="color: #0000ff;">use</span> Illuminate\Foundation\Http\Middleware\VerifyCsrfToken <span style="color: #0000ff;">as</span><span style="color: #000000;"> BaseVerifier;

</span><span style="color: #0000ff;">class</span> VerifyCsrfToken <span style="color: #0000ff;">extends</span><span style="color: #000000;"> BaseVerifier {

    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     </span><span style="color: #008000;">*/</span>
    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> handle(<span style="color: #800080;">$request</span>, Closure <span style="color: #800080;">$next</span><span style="color: #000000;">)
    {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> Add this:</span>
        <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$request</span>->method() == 'POST'<span style="color: #000000;">)
        {
            </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$next</span>(<span style="color: #800080;">$request</span><span style="color: #000000;">);
        }
        
        </span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$request</span>->method() == 'GET' || <span style="color: #800080;">$this</span>->tokensMatch(<span style="color: #800080;">$request</span><span style="color: #000000;">))
        {
            </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$next</span>(<span style="color: #800080;">$request</span><span style="color: #000000;">);
        }
        </span><span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> TokenMismatchException;
    }

}</span>
登录后复制

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


 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

修改CSRF的cookie名称方法

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

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

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

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


 

立即学习PHP免费学习笔记(深入)”;

 

立即学习PHP免费学习笔记(深入)”;

另外,如需要对指定的页面不使用CSRF,可以参考如下文章:

http://www.camroncade.com/disable-csrf-for-specific-routes-laravel-5/

 

立即学习PHP免费学习笔记(深入)”;

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号