2011-01-22 27 views
8

Ajax ile gönderilen formlarla ilgili bir sorunum var. Formlarımı Zend Framework ile yapıyorum. Bazıları gerçek formlardır, bu yüzden bir Hash öğesi ekliyorum. Diğerleri küçük operasyonlar içindir (burada aşağı çekmek ve aşağı çekmek gibi), ben de onları bağlantılarla yapıyorum.CSRF belirteci

Sorunum, özellikle küçük formlar (bağlantılar) için ajax kullanmam gerektiğidir. Pek çok soru görüyorum ama sorunu çözmek için yeterince kapsamlı bir şey yok. Formlar ajax yoluyla gönderildiğinde csrf jetonunun nasıl düzgün bir şekilde çalıştığına dair ayrıntılı bir açıklama var mı? tercihen Zend Framework ile ama genel PHP cevapları da yardımcı olacaktır.

cevap

7

CSRF belirtecine ihtiyacınız yoktur. Siz, HTTP_X_REQUESTED_WITH yöntemini kullanın (bkz. Ör. here).

+0

Bu sorudaki REQUESTED_WITH başlığını okudum http://stackoverflow.com/questions/3664044/anti-csrf-token-an d-javascript/3665136 # 3665136 ama Rook'un yorumları (ve cevabın kendisi) gerçekten güvenli olmadığını söylüyor. Eğer kullanırsam, sanırım hala ona "başka bir şey" eklemem gerekiyor. Senin düşüncen nedir? – samquo

+0

@samquo haha ​​SO güvenlik konusunda ismimin nasıl bir şey yaptığını seviyorum. Ancak, XRR için aynı kaynak politikası nedeniyle x_requested_ ile birlikte kullanılmazlığını kontrol ederseniz, doğrudur. – rook

+2

BTW, REQUESTED_WITH'ye güvenmekten farklı davranışları incelemek isteyebilirsiniz: Rails ve Django'nun her ikisi de son zamanlarda, yeterli koruma sağlanamayan durumları hesaba katmak için güncellendi. İşte Django'nun güncellemeleri ile ilgili notları: http://is.gd/JLBrfL Zend ile bunu nasıl yapacağımı bilmiyorum :) Ancak CSRF ve AJAX'ı ararken bunu buldum. – Rob

0

Bu sayfaya gelenler için ajax ile çalışma csrf almak mümkündür. Eğer proje sonlanmadan önce bu hakkı ekleyerek aracılığıyla kullanarak karma yeniden gerekecektir denetleyici olarak

:

$ form-> hash-> initCsrfToken();

$ this-> view-> csrfhash = $ form-> hash-> getValue();

: js ise

Eğer ajax yapmak için kullandığınız dosya, onu (şimdiye jquery için oluşturulan olarak karma örneğini bulmak için bir seçici kullanmak ihtiyacımız olacak

$ (# hash) .replaceWith (csrfhash);.. Eğer kimliği ve adı dahil tüm gizli csrf elemanını değiştirmek için gidiyoruz Ama bu kısmı yapmak oldukça kolay olmalı replaceWith kullanın Aslında eğer

İlgili konular