Size CSRF korumasını el ele öğretin

CSRF (Siteler arası istek sahteciliği): Siteler arası istek sahteciliği, yaygın bir ağ saldırısı yöntemidir. CSRF tam olarak nedir ve nasıl savunulur?

CSRF ilkesi

CSRF saldırı süreci aşağıdaki şekilde gösterilmektedir:

Kısacası, saldırgan sizin adınıza e-posta ve mesaj göndermek, paranızla bir şeyler satın almak ve hesabınızdan paranızı transfer etmek gibi yasal kimliğinizi çalmış ve adınıza kötü niyetli istekler göndermiştir. Sonuçlar felaket olabilir.

CRRF savunması

CSRF'yi savunmanın muhtemelen birkaç yolu vardır:

  • Kullanıcı gönderimini algılamak için yönlendiren, belirteç veya doğrulama kodunu kullanın.
  • Sayfadaki bağlantılarda kullanıcı gizlilik bilgilerini ifşa etmemeye çalışın.
  • Kullanıcı değişikliği ve silme gibi işlemler için sonradan işlemleri kullanmak en iyisidir.
  • Site genelinde evrensel olan ve kesinlikle çerez alanını ayarlayan çerezlerden kaçının.

Django'nun çözümü

Django, CSRF koruması için ara yazılım (CsrfMiddleware) kullanır. Spesifik ilkeler aşağıdaki gibidir:

Şu anda işlenen isteği değiştirin, tüm POST formlarına gizli bir form alanı ekleyin, csrfmiddlewaretoken adını kullanın ve değer, geçerli oturum kimliğinin karma değeri artı bir anahtardır. Oturum kimliği ayarlanmadıysa, ara yazılım yanıt sonucunu değiştirmeyecektir, bu nedenle oturumu kullanmayan istekler için performans kaybı ihmal edilebilir.

Oturum tanımlama bilgisi seti içeren tüm gelen POST istekleri için, csrfmiddlewaretoken olup olmadığını ve doğru olup olmadığını kontrol eder. Aksi takdirde, kullanıcı 403HTTP hatası alacaktır. 403 hata sayfasının içeriği, etki alanları arası bir istek maskelemesinin tespit edilmesi ve isteğin sonlandırılmasıdır.

Unutulmaması gereken bir diğer nokta da, HTML dışı istekleri dönüştürmekten kaçınmak için, ara yazılımın yanıt sonucunu düzenlemeden önce Content-Type başlığını kontrol etmesidir. Yalnızca text / html veya application / xml + xhtml olarak işaretlenen sayfalar değiştirilecektir. Daha sonra, özel kullanım yöntemi tanıtıldı.

POST formu gönderme

1. Ara yazılım ekleyin

Settings.py MIDDLEWARE_CLASSES içindeki "django.middleware.csrf.CsrfViewMiddleware" ara yazılımını ekleyin ve daha sonra csrf korumasını global olarak kullanabilirsiniz (varsayılan olarak eklenir);

Tek görünüm kontrolü için görünüm işlevine @csrf_protect de ekleyebilirsiniz, ancak bu, eksiklikler olabileceğinden önerilen yöntem değildir.

Not: Bu ara yazılım, SessionMiddleware'den sonra yürütülmelidir, bu nedenle CsrfMiddleware, listede SessionMiddleware'den sonra görünmelidir. Aynı zamanda, yanıt sonucunu yanıt sıkıştırılmadan veya sıkıştırılmadan önce işlemelidir, bu nedenle CsrfMiddleware, GZipMiddleware'den sonra yürütülmelidir.

2. Şablondaki ayarlar

POST tarafından gönderilen forma {% csrf_token%} ekleyin

Veya formatı formla tutarlı tutun, forma ekleyin

3. İşlev ayarlarını görüntüleyin

Yaygın olarak kullanılan 3 yöntem vardır:

Manuel olarak csrftoken oluşturun ve bunu şablon bağlamına ekleyin:

RequestContext'i kullanın

Oluşturmayı doğrudan kullanın

Çerezdeki csrf değerini doğrulamaya gerek yoksa

Karşılık gelen işlev artı @csrf_exempt decorator

Ajax POST isteği gönder

1. Ayarlar yukarıdakiyle aynıdır

2. Şablondaki ayarlar

2 yöntem vardır:

html şablonunun komut dosyası etiketini ekleyin (Not: js dosyasında ayarlanamaz)

İstek başlığını ayarla

Çerez eklentisi kullan

https://github.com/js-cookie/js-cookie/

İlki daha basit.

3. Görünüm işlevi ayarları yukarıdakiyle aynıdır

Diğer şablon motorları (jinja2 ile birlikte)

1. Ayarlar ve görünüm işlevi ayarları yukarıdakiyle aynıdır

2. Şablon ayarları

Jinja, aşağıdaki gibi ayarlanan {% csrf_token%} 'i tanıyamıyor

veya

3. Ayarları yukarıdaki gibi görüntüleyin

Yangtze Yeni Malzemesi iki kez satın alındı, her iki arka kapıda da başarısız oldu ve beşinci kez CMIG'e yakalandı.
önceki
Direksiyon logosunu kaplayan% 90'ı Porsche'yi tanıyor, bu yerli SUV alev aldı!
Sonraki
Yaz aylarında, "ıslak" a dikkat etmek için Disney'e gidin! Yaz eğlencesinin gelişimini kişisel olarak deneyimlemeniz için Düşünceli Junding Yüksek Sıcaklık Disney rehberi
"300.000'den az" Cadillac XTS için ne satarsınız?
Geely Proton'un Boyue ile aynı platformdaki ilk SUV'si daha yakışıklı görünüyor ve makul bir fiyata satılıyor
Yurtiçi E-PACE'e ne dersiniz? İşçilik kötü olmalı mı?
Kompakt SUV pazarında yeni bir model nasıl yeniden yaratılır?
Yarı iletken "boğa" hala yolda, bu hisse senetleri altın bir düzen dönemini başlatıyor
Borui ile aynı yüz, fiyatı 60.000 yuan'dan az, sıradan insanlar için yapılmış gerçek bir araba!
Seyahat Stratejisi | Spor, yürüyüşler ve duygular, yükseltilmiş West Coast Riverside Beauty nerede?
Bir ortak girişim SUV satın almak için 70.000 Kia Run'a ne dersiniz? Ne tür bir insan satın alır
Dongfeng Yueda Kia'nın boğulmasının ardından ...
En ucuz saf elektrikli SUV süper yakışıklı, bu yüzden gelecekte bir elektrikli motosiklet almanıza gerek yok!
Tesla mı Çin mi, kim kazandı?
To Top