默认情况下,Laravel 5验证和匹配所有POST请求的“令牌”,如何告诉L5也验证"GET、PUT & Delete“请求?
->防止任何没有有效令牌的请求
谢谢,
发布于 2015-07-24 09:35:29
Laravel为POST、PUT和DELETE验证令牌。如果遵循RESTful系统,则不需要验证GET请求的令牌。
从文件中:
您不需要在POST、PUT或DELETE请求上手动验证CSRF令牌。VerifyCsrfToken HTTP中间件将验证请求输入中的令牌与存储在会话中的令牌匹配。
http://laravel.com/docs/5.1/routing#csrf-protection
发布于 2017-01-14 23:56:57
您可以创建自己的中间件来处理它,并替换默认的Laravel VerifyCsrfToken类。在Laravel 5.3:
php artisan make:middleware VerifyCsrfTokenAllapp/Http/Kernel.php中的中间件类-搜索protected $middlewareGroups并用新的中间件替换VerifyCsrfToken::class。所以看起来是这样的:
受保护的\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,$middlewareGroups =[ 'web‘=> \App\Http\中间件\EncryptCookies::class,\Illuminate\Session\Middleware\StartSession::class,\Illuminate\View\Middleware\ShareErrorsFromSession::class,\App\Http\Middleware\VerifyCsrfTokenAll::class,\Illuminate\Routing\Middleware\SubstituteBindings::class,,app/Http/Middleware/VerifyCsrfTokenAll.php中,让它扩展原始验证器,并覆盖isReading()方法,因为这个方法负责绕过GET请求。这种情况取决于您的用例:如果您只想在某些路由上进行验证,最好将其作为路由中间件(在我的情况下)--我创建了一个VerifyCsrfTokenGet中间件,并在app/Http/Kernel中将它分配给了$routeMiddleware组,如下所示:
protected $routeMiddleware = [
'csrf_get' => \App\Http\Middleware\VerifyCsrfTokenGet::class,
...在app/Http/MIddleware/VerifyCsrfTokenGet.php中,我进行了验证:
public function handle($request, Closure $next)
{
// check matching token from GET
$sessionToken = $request->session()->token();
$token = $request->input('_token');
if (! is_string($sessionToken) || ! is_string($token) || !hash_equals($sessionToken, $token) ) {
throw new \Exception('CSRF token mismatch exception');
}
return $next($request);
}最后将它作为csrf_middleware分配给任何我想要验证的路由,例如。在某些控制器的构造函数中:
class InvoicesController extends Controller
{
function __construct()
{
// define middleware
$this->middleware('csrf_get', ['only' => ['pay', 'createmail']]);
}发布于 2018-04-11 10:45:14
"csrf令牌“只是一个键名为"_token”的普通会话值,您可以直接获取和重置这个值。就像这样:
$token = $this->request->get('_token');
if(is_null($token) || $token!=csrf_token())
throw new AppException('illegal_pay_operation');
else
Session::regenerateToken();https://stackoverflow.com/questions/31606926
复制相似问题