2017-02-09 12 views
0

JSからAJAXを通して呼び出されるアクションを保存するためのajaxコントローラがあります。symfony 2 - 安全なAjaxコントローラ

ここでリクエストがAJAXによって行われておらず、他のされている場合、私は検証すべてのアクションで:

if (!$request->isXmlHttpRequest()) { 
    return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400); 
} 

さて問題は、すべてのAjaxのコントローラのアクションは、誰もが呼ばれるべきではないということですが、むしろの役割に応じてログインしたユーザー

アクションへの要求がJSからAJAXによって作られたが、アクションは、コントローラにあるので、私はまだ$this->getUser()によってユーザーオブジェクトに記録され得ることができていますし、ユーザーがisGranted()によってコントローラのアクションを実行するための許容ROLEを持っているかどうかを確認することです。

例:

if (!$authorizationChecker->isGranted('ROLE_ADMIN')) { 
    return new JsonResponse(array('message' => 'This can be performed only by admin!'), 400); 
} 

私はすべてのアクションで内部のコントローラからROLESをチェックしたりsecurity.ymlにAJAXルートのaccess_controlを設定しようとするべきでしょうか?

これらの2つのアプローチの大きな違いは何もわかりませんが、どちらがより実用的で、自分のAjaxアクションをより安全に保つことができるかを知りたいと思います。

+0

あなたがテストを書く限り、それらの両方は同等に安全です。私の言うことは、効果は同じになるということです。 アクションをあまり冗長にしたい場合は、yamlを使用するか、アノテーションを使用します(http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html)。 – jkrnak

答えて

0

AJAXコントローラの数によって異なります。あなたが非常に多くのコントローラを持っている場合、それらは特定の役割のためだけに許可されるべきです、のsecurity.ymlは良い選択です。そうでなければ、各コントローラに条件を設定できます。

サブジェクト属性(視聴コンテンツ)に基づいて決定する許可がある場合は、voterを使用するとよいでしょう。

関連する問題