В двух местах я обнаружил, что защита Laravel csrf можно обойти, установив переменную protected $except
. Но это не кажется, работает в соответствии с док:Laravel: webhooks необходимо обходить проверку CSRF от Laravel
http://laravel.com/docs/5.1/billing#handling-stripe-webhooks
и в
http://laravel.com/docs/5.1/routing#csrf-protection
protected $except = [
'stripe/*',
];
Я использую 5,1
Вот в routes.php
Route::match(['post'], '/webhooks/provider/callback/{version}', [
'as' => 'provider.webhooks.callback', 'uses' => '[email protected]'
]);
Route::match(['post'], '/webhooks/provider/fallback/{version}', [
'as' => 'provider.webhooks.fallback', 'uses' => '[email protected]'
]);
А вот
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier {
protected $except = [
'webhooks/*',
'/webhooks/*',
];
public function handle($request, Closure $next)
{
return parent::handle($request, $next);
}
}
А вот что в BaseVerifier
, где я не вижу какой-либо $except
чека:
<?php namespace Illuminate\Foundation\Http\Middleware;
use Closure;
use Illuminate\Contracts\Routing\Middleware;
use Symfony\Component\HttpFoundation\Cookie;
use Illuminate\Contracts\Encryption\Encrypter;
use Illuminate\Session\TokenMismatchException;
use Symfony\Component\Security\Core\Util\StringUtils;
class VerifyCsrfToken implements Middleware {
public function handle($request, Closure $next)
{
if ($this->isReading($request) || $this->tokensMatch($request))
{
return $this->addCookieToResponse($request, $next($request));
}
throw new TokenMismatchException;
}
}
Однако я решил комментирование, но до сих пор установки $except
должны были обработаны в соответствии с документом; не так ли ?:
<?php namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel {
protected $middleware = [
//'App\Http\Middleware\VerifyCsrfToken',
];
}
А вот в журнале ошибок:
[2015-07-06 09:40:34] production.ERROR: exception 'Illuminate\Session\TokenMismatchException' in /vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:46
Stack trace:
#0 /app/Http/Middleware/VerifyCsrfToken.php(26): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#1 /vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(125): App\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
Вы можете разместить свой файл маршруты? Вы установили маршрут как '/ stripe/webhook'? – Laurence
И используете ли вы Laravel 5.1? – Laurence
да его 5.1 @TheShiftExchange – itsazzad