Laravel对get请求进行csrf检验

Laravel的csrf防护默认排除了get方法,可以在VerifyCsrfToken.php中看到:

/**
 * Determine if the HTTP request uses a ‘read’ verb.
 *
 * @param  IlluminateHttpRequest  $request
 * @return bool
 */
protected function isReading($request)
{
    return in_array($request->method(), ['HEAD', 'GET', 'OPTIONS']);
}

以上的意思是数组中的方法都不使用csrf校验,我们可以增加一个中间件来自定义csrf检验方法:

namespace AppHttpMiddleware;
use Closure;
use IlluminateFoundationHttpMiddlewareVerifyCsrfToken;
use IlluminateSessionTokenMismatchException;
class AuthCsrf extends VerifyCsrfToken
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
    if (in_array($request->method(), ['POST', 'GET']) && $this->tokensMatch($request))
    {
        return $next($request);
    }
    throw new TokenMismatchException;
    }
}

以上针对get,post方法都进行csrf校验

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注