14

最近laravelを調べていて、彼らが持っているCSRF保護を理解しようとしています。しかし、私はそれを働かせることができません。CSRF フィルターを使用して、送信されたすべての投稿リクエストを検証する方法はありますか? laravel システムには次のようなものがあることがわかりました。

    App::before(function($request)
{
    //
});

CSRF フィルターでこれを使用するにはどうすればよいですか? 次のようないくつかの異なることを試しています

App::before(function($request)
{
    Route::filter('csrf','post');
});

しかし、私はおそらくここから離れています..これはどのように機能しますか? または、この方法でそれを行うことさえ可能ですか?

4

7 に答える 7

23

ルート グループを使用できます。これにより、指定されたオプションがグループで定義されたすべてのルートに適用されます。

Route::group(array('before' => 'csrf'), function()
{
    Route::post('/', function()
    {
    // Has CSRF Filter
    });

    Route::post('user/profile', function()
    {
    // Has CSRF Filter
    });

    Route::post(....);
});

特定のルートの場合、またはグループ化が必要ない場合は、パターン フィルターを使用することもできます。

//all routes beginning with admin, sent via a post http request will use the csrf filter
Route::when('admin/*', 'csrf', array('post'));

注: このコードは、routes.php ファイルに入ります。

于 2013-06-27T00:02:27.800 に答える
4

なぜか入れる

$this->beforeFilter('csrf', array('on' => array('post', 'delete', 'put')));

BaseController.php に入れてもうまくいきませんでした。偽のトークンでテストを行いました。だから私は次の解決策を思いついた:

ルート.php:

Route::group(array('before' => 'csrf'), function() {
    Route::resource('areas', 'AreaController');
    Route::resource('usuarios', 'UsuarioController');
    // ... more stuff
});

filters.php (csrf フィルター セクション):

Route::filter('csrf', function()
{
    if ($_SERVER['REQUEST_METHOD'] === 'POST' || $_SERVER['REQUEST_METHOD'] === 'PUT') {
        if (Session::token() != Input::get('_token'))
        {
            throw new Illuminate\Session\TokenMismatchException;
        }
    }
});

それは私のためにトリックをしました。

于 2013-09-25T22:09:01.460 に答える
0

あなたが提供したコードは、フィルターを作成するだけです。ROUTER または CONTROLLER で使用する必要があります (必要に応じて basecontroller でも)。

私の意見では、ROUTES でフィルターを使用するのが最適な場所です。

于 2013-06-27T01:20:14.657 に答える
0

これを に追加するだけBaseControllerです。

// Be sure to call parent::__construct() when needed
public function __construct()
{
    // Perform CSRF check on all post/put/patch/delete requests
    $this->beforeFilter('csrf', array('on' => array('post', 'put', 'patch', 'delete')));
}

これにより、すべてのポスト、プット、パッチ、および削除リクエストに CSRF フィルターが追加されます。

于 2014-12-06T08:45:02.540 に答える