2011-11-10 17 views
6

İnternette arama yaptıktan sonra, insanlar normal olarak bu durumla ilgilenirler - ön uç kullanıcıya csrf belirteci tanımlama bilgisi gönderebilen django görünümü işleviyle oluşturulur. Kullanıcı ajax kullanarak sunucuya istekte bulunduğunda, insanlar csrf sunucusuna gönderen ajaxSend davranışını yeniden yazabilirler.Backend ve frontend ayrıldığında Django CSRF

Ancak, benim durumum, ön uçurumun arka uçtan tamamen ayrılmış olması, yani, ön uçumun nginx çalıştıran özel bir sunucuda olması ve sadece bir html'nin hashbang kullanarak tüm farklı sayfaları sağlaması. . Arka uçum, farklı alan adı kullanarak farklı bir sunucuda çalışıyor ve bu durumda, müşteri csrf çerezini nasıl ediniyor? Arka tarafım sadece json api dönüşü sağladı.

Teşekkür ederiz.

+0

biri bu lütfen cevap = / – holms

cevap

0

If you look at the CRSF token source: you can see that all the csrf_middleware does it check the cookie against the post value. sadece çerez zaten ajax olsa ayarlanmış gerektiğini oldu çünkü sunucuya geri sonrası değerini almak gerekir. If you look at the template tag source you can see that it is just taking the variable out of the context. Ya mevcutsa ya da calling the context processor directly. ise bağlamdan çekerek yanıtınıza yapıştırın. Şimdi sadece POST değişkeni crsf_token olarak geri göndermeniz gerekir.

0

Ön ucun frontend.example.com alanına sahip olduğunu ve arka alanın arka tarafındaki.end.example.com alan adını aldığını varsayalım. (Django dinlenme çerçevesi gibi bir şey varsa) Kullanabiliyorsanız güvenlik katmanını etkinleştirmenin iki yolu vardır. CSRF Koruması veya CORS CORS için

ardından
pip install django-cors-headers 

ve

INSTALLED_APPS, MIDDLEWARE_CLASSES bu yapılandırma ve CORS_ORIGIN_WHITELIST ön uç alanını ekleyin. Bir Açısal App kullanıyorsanız

CORS_ORIGIN_WHITELIST = (
    'frontend.example.com' 
) 

CORS, diğer frontend.example.com CSRF'e için


daha

CSRF_COOKIE_DOMAIN = ".mydomain.com" 

herhangi bir etki kaynaklanan herhangi http isteği engellemek ve edecek aşağıdaki gibi yapın, ve daha sonra bir http isteği yaparken üstbilgileri ekleyin.

headers : { 
    "x-csrftoken" : $cookies.csrftoken 
} 
İlgili konular