2011-08-10 12 views
3

を渡すときにsymfonyのCSRF攻撃も検出されました:_csrf_tokenが実際にレンダリングされている私の形である。ここ_csrf_token

<form novalidate action="<?php echo url_for('article/submit') ?>" method="POST"> 
    <?php echo $form['title']->renderRow() ?> 
    <?php echo $form['content']->renderRow() ?> 
    <?php echo $form->renderHiddenFields() ?> 
    <input type="submit" value="Save"/> 
</form> 

そして、生成されたHTMLソースを見て、。私はvar_dump($_POST); die;をすれば、私は取得しても自分の行動に

_csrf_token [CSRF attack detected.] 

public function executeSubmit(sfWebRequest $request) 
{ 
    $this->forward404Unless($request->isMethod('post')); 
    $request->checkCSRFProtection(); 

    die('submitting post...'); 
} 

エラー:ここに私のアクションがある

Array 
(
    [title] => string(8) "My title" 
    [content] => string(10) "My Content" 
    [_csrf_token] => string(32) "<my token here>" 
) 

ので、CSRFトークンが確実にレンダリングされていると正しく渡されました。私は間違って何をしていますか?

さらに、checkCSRFProtection()のドキュメントはありますか? APIのドキュメントは、それが存在することを認める以外に何も言いません。

答えて

4

チェックするためにいくつかのこと:

出典:http://oldforum.symfony-project.org/index.php/t/17867/から

あなたの設定であなたの "秘密" を定義していることを確認してください:

csrf_secret: ThisIsMySecret # Unique secret to enable CSRF protection or false to disable` 

また、上のベースそのフォームから収集したものは、$this->form->isValid()でCSRF保護チェックが自動的に行われるため、すでにフォームがチェックされている場合は$request->checkCSRFProtection()への呼び出しは不要です有効です。そうでない場合は、$this->form->isValid()を追加します。

$request->checkCSRFProtection()はフォームでは機能しません。それは、ユーザーがリンクをクリックしたときに配信されるリクエストを検証することです(正しい場合)。 CSRF保護が有効になっている場合、link_to()は自動的に生成するリンクにCSRF保護を追加します。したがって、基本的に、フォームのCSRF保護は、フォームから生成されなかった要求とは異なります。

詳細については、このチケットを参照してください。http://trac.symfony-project.org/ticket/7315

関心のある別のチケットを:http://trac.symfony-project.org/ticket/5698

+1

問題は、私が代わりに使用しようとしているの '' checkCSRFProtection()を使用して、フォームをチェックしようとしていたということでした'isValid()'メソッドです。ご協力いただきありがとうございます。 Symfony 1.4 API Docsでは、 'checkCSRFProtection()'についての詳細は提供していません。それは 'link_to()'のためだけに機能することを知っておきましょう。再度、感謝します! –

+0

@Jakobud:うれしい!ええ、ドキュメントはかなり厄介です。 –

+1

@jakobud:レコードを削除する単純なajax投稿要求など、検証するための実際のフォームがない場合は、 'checkCSRFProtection'を使用します。生成された管理モジュールといくつかの例を見ることができます。 – prodigitalson

関連する問題