为 VerifyCsrfToken 添加过滤条件
问题#
Laravel 默认情况下会对所有的 POST 请求进行 CSRF 过滤,但是有时候你想让一些请求跳过 CSRF 检查,例如你提供的 API 。
什么是 CSRF?
CSRF(Cross-site request forgery 跨站请求伪造,也被称为 “One Click Attack” 或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与 XSS 非常不同,并且攻击方式几乎相左。XSS 利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站。与 XSS 攻击相比,CSRF 攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比 XSS 更具危险性。
CSRF 不通过会报以下错误:
TokenMismatchException in VerifyCsrfToken.php line 45
解决#
修改 app/Http/Middleware/VerifyCsrfToken.php
文件:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
use Closure;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
public function handle($request, Closure $next)
{
// 如果是来自 api 域名,就跳过检查
if ($_SERVER['SERVER_NAME'] != config('api.domain'))
{
return parent::handle($request, $next);
}
return $next($request);
}
}
summer
推荐文章: