Laravel对get请求进行csrf检验

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

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

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

namespace App\Http\Middleware;

use Closure;
use \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Session\TokenMismatchException;

class AuthCsrf extends VerifyCsrfToken
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $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校验

发表评论

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