2012-02-29 11 views
3

私はsfDoctrineGuardとsfForkedDoctrineApplyの両方を使用しています。ログインしたユーザーが親のプロファイル設定の一部を継承する子ユーザーを作成できるようにするモジュールを作成しました。それは偉大な、それが書かれている方法で、しかし、私はそれが有効になっているので、(正当には、私が追加するかもしれない)csrfを検出するために働くためには、設定全体のアプリケーションのcsrf保護をオフにする必要があります攻撃。だから、私はそれをオフにする方法が必要です、または少なくとも確認をキャッチし、削除します。symfony 1.4どのように1つの登録フォームのcsrf保護を無効にするのですか?

私は多くのテクニックを試しましたが、いずれも効果がありませんでした。以下を含む:

 $this->disableLocalCSRFProtection(); 

の形で。問題は、それはカスタムフォームで、親configがcsrf保護を注入して呼び出されていることです。

私は正しい方向を指していると思ういくつかの解決策を読んだ:Symfony 1.4: Custom error message for CSRF in formsしかし、この特定の問題には対処していない。

提案と解決策は大歓迎です。前もって感謝します。

+0

どこで '$ this-> disableLocalCSRFProtection();'を呼び出していますか? 'YourForm :: configure()'では? –

+0

はい、フォームの設定でその呼び出しを行いました。 – Patrick

+0

"_itはカスタムフォームであり、csrf保護を注入している親の設定が呼び出されています_"あなたは 'disableLocalCSRFProtection()'を使用して親フォームでcsrf保護を無効にできますか? – melekes

答えて

6

基本sfFormコンストラクタは、有効にするかどうか、およびCSRFSecretになるものを設定します。動作しませんdisableLocalCSRFProtection()を介してローカルCSRF保護を無効にするような場合では、

class sfForm implements ArrayAccess, Iterator, Countable 
{ 
    public function __construct($defaults = array(), $options = array(), $CSRFSecret = null) 
    { 
    $this->setDefaults($defaults); 
    $this->options = $options; 
    $this->localCSRFSecret = $CSRFSecret; 

    $this->validatorSchema = new sfValidatorSchema(); 
    $this->widgetSchema = new sfWidgetFormSchema(); 
    $this->errorSchema  = new sfValidatorErrorSchema($this->validatorSchema); 

    $this->setup(); 
    $this->configure(); 

    $this->addCSRFProtection($this->localCSRFSecret); 
    $this->resetFormFields(); 
    } 
} 

、あなたは「偽」CSRFSecret」でフォームのインスタンスを作成しようとするかもしれ

例:

$myForm = new myForm(array(), array(), false); 

編集:(上記の提案は、ポスターのために動作しませんでした)

アプリケーションのsettings.ymlの "csrf_secret"設定にコメントしてみてください。この行にコメントした後、symfonyのキャッシュをクリアすることを忘れないでください。 CSRF保護がグローバルに無効になっていることを確認するには、次のように "sf_csrf_secret"設定の値をチェックします。

var_dump(sfConfig::get('sf_csrf_secret')) 

これは、あなたに真偽値を与えます。これは、すべてのCSRF保護が無効になっていることを意味します。

+0

ええ、私はあまりにもその解決策を試みたことを言及すべきでした...無駄に。他のアイデア?私は思う、私はここに根本的に離れているかもしれない、問題は2つのcsrfトークンが提出されていることである(ログインしたユーザーのためのものと新しいユーザーのためのもの)。 csrfが有効になっているときにcsrf攻撃を正しく検出します。 – Patrick

+0

Patrick、私はあなたのために私の最新の編集が願っています。私は質問にタイムラインを持たせるために "この"コメントを追加しています。編集が完了したとき。 – Lashae

+0

遅れて申し訳ありません...人生は途方もないです。私はあなたが提案したようにして、成功ページのエコーで本当にブール(false)を得ました。だから、私の質問はなぜ私はcsrf保護を有効にすると "csrf_token required" msgを取得するのでしょうか?それは私を困惑させる。 – Patrick

6

$ this-> disableLocalCSRFProtection();どちらも私のために働かなかった。 フォームを作成した直後に、crsf validator requiredオプションをfalseに設定することに成功しました。

<?php 
    $form = new UploadImageForm(); 
    $form->getValidator($form->getCSRFFieldName())->setOption('required', false); 

    if ($request->isMethod(sfWebRequest::POST)) { 
     ... 
?> 
+0

チャンピオンのように働いた。 CSRFが不要で、むしろAPIキー認証が使用される残りの実装にはこれが必要です。 –

関連する問題