zoukankan      html  css  js  c++  java
  • [PHP]

    前文

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

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

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


    方法一

    打开文件:appHttpKernel.php

    把这行注释掉:

    'AppHttpMiddlewareVerifyCsrfToken'

    方法二

    打开文件:appHttpMiddlewareVerifyCsrfToken.php

    修改为:

    <?php namespace AppHttpMiddleware;
    
    use Closure;
    use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as BaseVerifier;
    
    class VerifyCsrfToken extends BaseVerifier {
    
        /**
         * Handle an incoming request.
         *
         * @param  IlluminateHttpRequest  $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方式,需要把appHttpMiddlewareVerifyCsrfToken.php修改为:

    <?php namespace AppHttpMiddleware;
    
    use Closure;
    use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as BaseVerifier;
    
    class VerifyCsrfToken extends BaseVerifier {
    
        /**
         * Handle an incoming request.
         *
         * @param  IlluminateHttpRequest  $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 AppHttpMiddleware;
    
    use Closure;
    use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as BaseVerifier;
    
    class VerifyCsrfToken extends BaseVerifier {
    
        /**
         * Handle an incoming request.
         *
         * @param  IlluminateHttpRequest  $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,如:

    要修改这个名称值,可以到打开这个文件:vendorlaravelframeworksrcIlluminateFoundationHttpMiddlewareVerifyCsrfToken.php

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

    当然,你也可以在appHttpMiddlewareVerifyCsrfToken.php文件中,重写addCookieToResponse(...)方法做到。


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

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

  • 相关阅读:
    嵌入式Linux的调试技术
    硬件抽象层:HAL
    让开发板发出声音
    android 底层入门开发(二)
    android 底层开发入门(一)
    android驱动开发前的准备(五)
    Android驱动开发前的准备(四)
    Android驱动开发前的准备(三)
    Android驱动开发前的准备(二)
    Android驱动开发前的准备(一)
  • 原文地址:https://www.cnblogs.com/HD/p/4555369.html
Copyright © 2011-2022 走看看