2017-02-03 6 views
0

リンク上のCSRFトークンの使用に関する質問があります。私の場合、私はCSRFトークンで私の削除リンクを保護したい。私はそれを行う方法を見つけました:リンク上のCSRFトークンを使用

私の見解では、私は小枝csrf_token()関数(http://symfony.com/doc/current/reference/twig_reference.html#csrf-token)を使用します

<a class="btn btn-danger" value="Delete" href="{{ path('tube_delete', { 'id': tube.id, 'token': csrf_token('deleteTube-' ~ tube.id) }) }}"> 
    <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> 
</a> 

そして、私のコントローラでは、isCsrfTokenValid()メソッド(http://symfony.com/doc/current/controller/csrf_token_validation.htmlを):

if (!$this->isCsrfTokenValid('deleteTube-'.$tube->getId(), $request->get('token'))) { 
    $this->addFlash('warning', 'The token is not valid !'); 
} 

この作品の罰金のすべての が、私はあなたが見ることができるように、私は(各削除リンクの異なるトークンを使用し、CSRFトークンに関する一般的な質問をしました例:deleteTube-1、deleteTube-2、 ...トークンIDのオブジェクトIDを持つ)。私のセッションでは、たくさんのcsrfトークンを作成しました。

それは良い方法ですか、それともクラスのすべての削除リンクに同じトークンを使用する必要がありますか? token_idの場合:deleteTube for Tube、deleteComment for Commentなど?私はリンクごとに異なるトークンを持つ方が良いと思いますが、おそらくオーバーヘッドですか?

ありがとうございました。

PS:私の英語のため申し訳ありません... :-(

+0

私はsymfonyのメインCSRFトークンがフォームで使用したと思われます1つのプロジェクトにつき1つだけですので、すべてのリンクごとに1つだけを使用するのはなぜ難しいでしょうか? –

+0

フォームのTubeに移動すると、フォームの追加時には常に同じトークンを使用しますセッションを編集する場合、私はチューブを編集すると、それはaddフォームと同じトークンであり、編集されたすべてのチューブに対して同じトークンです。 elete、Cancel)を使用して、CSRFによるフォームの保護と確認を行います。この場合、symfonyはセッションで_csrf/formトークンを作成して再利用するため、このメソッドを使用するすべての削除リンクに対して同じトークンを使用しています。 – mpiot

+1

CSRF(クロスサイトリクエスト偽造)の目的は、悪意のあるWebサイトがユーザーの認証されたセッションを通じて行動を起こさないようにすることです.IMHOでは、トークンを増やすことでセキュリティが強化されないため、 –

答えて

0

JavaScriptがすべてのリンクのためのボックスを確認しレンダリングすることができますあなたのコントローラでは:。

private function createDeleteForm(Article $article) 
{ 
    return $this->createFormBuilder() 
     ->setAction($this->generateUrl('news_delete', array('id' => $article->getId()))) 
     ->setMethod('DELETE') 
     ->add(
      'submit', 
      'Symfony\Component\Form\Extension\Core\Type\SubmitType', 
      ['label'=>'Delete', 'attr' => ['onclick'=>'return confirm("Are you sure?")', 'class' => 'btn btn-danger']] 
     ) 
     ->getForm() 
    ; 
}