现在我已经
了Route::when('*', 'csrf', ['post']);
在我的routes.php
文件中,以保护我免受CSRF攻击。在filters.php
我有:
Route::filter('csrf', function()
{
if (Session::token() !== Input::get('_token'))
{
throw new Illuminate\Session\TokenMismatchException;
}
});
我现在遇到的问题是我正在使用第三方服务(Google Calendar API)进行集成,并将其POST回我的网站,这当然会导致CSRF保护。
如何针对特定路径前缀禁用该过滤器,例如/gapi
?
答案 0 :(得分:1)
您需要定义 2个路线组并应用 csrf 并将 CSRF 过滤器应用于其中之一。通过这种方式,您可以将需要启用 CSRF 保护的路线与那些不需要保护的路线分开。
这对你有用:
Route::filter('csrf', function() {
if (Request::method() == 'POST' && Session::token() !== Input::get('_token')) {
throw new Illuminate\Session\TokenMismatchException;
}
});
Route::group(array('before' => 'csrf'), function() {
// here define all routes that need CSRF protection enabled
});
Route::group(array(), function() {
// here define all routes that do not need CSRF protection
});
您可以在 Laravel 4.2 中详细了解路线分组的工作原理:http://laravel.com/docs/4.2/routing#route-groups
答案 1 :(得分:0)
您还可以排除以特定网址开头的路线:
Route::whenRegex('#(?!gapi/)#A', 'csrf', ['post']);