3

symfony 1.4 で jquery を使ってフォームを送信しようとしていますが、毎回 CSRF 攻撃検出エラーが表示されます。これは、フォームデータを送信するために使用するコードです:

$.ajax({
      type: 'post',
      cache: false,
      url: $('#assign-form form').attr('action'),
      data: (
        'activity[id]=' + $('#activity_id').val() +
        '&activity[_csrf_token]=' + $('#activity__csrf_token').val() +
        '&activity[assigned_to_user_id]=' + $('#activity_assigned_to_user_id').val() +
        '&activity[assigned_to_group_id]=' + $('#activity_assigned_to_group_id').val()
      )
});

何か不足していますか?

ありがとう、ラドゥ。

4

5 に答える 5

1

確認すべきことの 1 つは、入力を検証している Form オブジェクトが、トークンを生成したものとまったく同じクラスであるかどうかです。デフォルトでは、クラスは CSRF トークンの生成に使用されます。

たとえば、フォーム html を生成するために使用されるフォームのサブクラスのインスタンスがあり、その後、先祖のフォーム クラスを使用するアクションに投稿した場合、検証はデフォルトで失敗する可能性が高くなります。

これが問題であることが判明した場合は、トークンの作成をオーバーライドすることができます。

また、トークン フィールドの値に実際にトークンが含まれていることを確認しましたか? console.log() は、これを発見するのに役立つ場合があります。

うーん...コードを詳しく見てみると、「データ」に渡すクエリ文字列を作成していることがわかります。代わりに、実際の JSON スタイルのオブジェクトを渡そうとしましたか?

于 2010-02-05T22:08:59.647 に答える
0

通常の原因は、ブラウザーが Cookie を受け入れていないことです。Cookie が期待どおりに返されることを確認しましたか (例: httpheaders、wireshark、tamperdata)。

settings.yml でシークレットを構成しましたか?

C.

于 2010-02-05T23:09:50.927 に答える
0

Does the session cookie really received it with ajax query ? your session cookie as returned by server should be exactly the same with a plain HTTP request (for instance the first request initiating session management) and with XMLHttpRequest, otherwise you'll get trouble with CSRF.

于 2010-06-22T11:13:05.050 に答える
0

この小さな問題は、過去に私を怒らせました。

この特定のフォームの CSRF 保護を無効にすることが許容される場合 (多くの場合はそうなる可能性があります)、次を /lib/form/... フォルダーの Form クラスに追加できます。

public function configure ()

  $this->disableLocalCSRFProtection();

常に無効にしたくない場合は、フォームの特定のインスタンスに対して CSRF を無効にすることも可能だと思いますが、これを試したことはありません/手元にコードがありません。

于 2010-02-08T22:23:23.297 に答える
0

$('#activity__csrf_token').val()

その要素 ID に 2 つのアンダースコアを含めるつもりでしたか?

于 2010-09-16T21:02:45.727 に答える