Ajax kullanarak verileri gönderirken CSRF saldırısı algılandı

5 Cevap php

Ben Symfony 1.4 jquery kullanarak bir formu göndermek için çalışıyorum, ama CSRF saldırısı algılandı hata her zaman açılır. Bu i form verilerini göndermek için kullanabileceğiniz kod:

$.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()
      )
});

Ben bir şey eksik?

Thanks, Radu.

5 Cevap

Bakmak için bir şey girişini doğrularken Form nesnesi belirteci oluşturulan biri olarak aynı sınıf olup olmadığıdır. Varsayılan olarak, sınıf CSRF belirtecin üretimi kullanılır.

Örneğin, form html oluşturmak için kullanılan bir formun alt sınıfının bir örneğini vardı ve sonra ata form sınıfı kullanılan bir eylem yayınlanmıştır Eğer, doğrulama büyük olasılıkla varsayılan olarak başarısız olur.

Bu bu sorun ortaya çıkarsa belirteç oluşturulmasını geçersiz kılmak mümkündür.

Ayrıca, simge alanın değeri aslında bir belirteç içerir doğruladıktan? A console.log () Bu keşfetmenize yardımcı olabilir.

Ben kodunuzu daha yakından bakmak gibi Um ... bakmak için başka bir şey, 'veri' olarak geçmek için bir sorgu dizesi inşa ediyoruz olmasıdır. Yerine gerçek bir JSON-stil nesnesi geçen denediniz mi?

Eğer beklendiği gibi çerezler (örneğin iehttpheaders, wireshark, TamperData) iade ediliyor kontrol ettikten - Olağan neden tarayıcı çerezleri kabul etmiyor olmasıdır?

Eğer settings.yml içinde gizli yapılandırmak mı?

C.

Bu küçük sorun geçmişte beni delirtti.

Bu özel formu (genellikle olabilir) için CSRF korumasını devre dışı bırakmak için sizin için kabul edilebilir eğer, / lib / form / ... klasörüne Form sınıfına aşağıdaki ekleyebilirsiniz:

public function configure ()

  $this->disableLocalCSRFProtection();

Ben bunu her zaman engelli olması istemiyorsanız buna da formun bir örneği için CSRF devre dışı bırakmak mümkündür inanıyorum, ama bu / eldeki kodu yok denemedim.

Oturum çerezi gerçekten ajax sorgu ile aldı mı? sunucu tarafından döndürülen olarak oturum çerezi aksi takdirde CSRF ile sorun alırsınız, (örneğin ilk istek başlatılması oturum yönetimi için) bir düz HTTP isteği ile ve XMLHttpRequest ile tam olarak aynı olmalıdır.

$ ('# Activity__csrf_token'). Val ()

Eğer o eleman id çift çizgi var demek istediniz?