Django mükemmel güvenlik özelliklerine sahiptir, ancak uygulamalarınızın gerçekten güvenli olması için bunları ve ne yaptıklarını anlamanız çok önemlidir.
Django, web uygulamaları oluşturmak için güvenli bir temel sağlar. Ancak Django'nun varsayılan güvenlik özelliklerine güvenmek yeterli değildir. Uygulamalarınızın güvenliğini güçlendirmek için ek önlemler almanız çok önemlidir.
Ek önlemler uygulayarak olası güvenlik açıklarını azaltabilir, hassas verileri koruyabilir ve uygulamanızı siber tehditlerden koruyabilirsiniz. Bu, kullanıcılarınızın bilgilerinin korunmasını sağlar ve kuruluşunuzun itibarını ve güvenilirliğini korumaya yardımcı olur.
Dekoratörlerle Görünümleri Koruma
Django'daki görünümler, gelen istekleri işler. Müşterinin alacağı yanıtı belirlemede hayati bir rol oynarlar. Görünümlerin güvenliğini sağlamak, erişimi kontrol eder ve hassas işlevleri korur. Django, belirli güvenlik önlemlerini uygulamak için görünümlere uygulayabileceğiniz dekoratörler sunar.
@login_required Dekoratör
bu @oturum açmak gereklidir dekoratör, yalnızca kimliği doğrulanmış kullanıcıların belirli bir görünüme erişebilmesini sağlar. Kimliği doğrulanmamış bir kullanıcı görünüme erişmeye çalıştığında, uygulama onları oturum açma sayfasına yönlendirir.
itibaren django.contrib.auth.decorators içe aktarmak oturum açmak gereklidir
itibaren django.http içe aktarmak HttpResponse
@oturum açmak gereklidir
kesinliklegüvenli_görünüm(rica etmek):
# Görüş mantığınız burada
geri dönmek HttpResponse("Bu güvenli bir görüş")
Uygulamak @oturum açmak gereklidir secure_view işlevine dekoratör, görünümün mantığını yürütmeden önce kullanıcının kimliğinin doğrulanmasını otomatik olarak sağlar.
Özel Dekoratörler
Django, özel dekoratörler oluşturmanıza izin verir. Bu, ek güvenlik kontrolleri veya kısıtlamaları uygulamanıza olanak tanır. Örneğin, belirli kullanıcı rollerine erişimi kısıtlayan bir dekoratör oluşturmak isteyebilirsiniz.
itibaren işlev araçları içe aktarmak sarar
itibaren django.http içe aktarmak HttpResponsekesinlikleadmin_only(view_func):
@sarma (view_func)
kesinliklesarıcı(istek, *args, **kwargs):
eğer request.user.is_superuser:
geri dönmek view_func (istek, *args, **kwargs)
başka:
geri dönmek HttpResponse("Erişim engellendi")
geri dönmek sarıcı
bu admin_only dekoratör, görünüme erişen kullanıcının süper kullanıcı olup olmadığını kontrol eder. Varsa, görüntüleme işlevi çalışır, aksi takdirde kullanıcı erişimini reddeder.
Kullanıcı Doğrulama ve Yetkilendirme
Kullanıcı kimlik doğrulaması ve yetkilendirme, Django uygulamalarının güvenliğini sağlamanın kritik bileşenleridir. Doğru kişinin uygulamanın belirli işlevlerine erişmesini sağlarlar.
Kullanıcı doğrulama
Kullanıcı kimlik doğrulaması, uygulamanıza erişen kişinin kimliğini doğrular. Django'nun kimlik doğrulama sistemi, bunun üstesinden gelmek için işlevsellik sağlar.
itibaren django.contrib.auth içe aktarmak doğrulamak, oturum açmak
itibaren django.http içe aktarmak HttpResponsekesinliklelogin_view(rica etmek):
eğer istek.yöntem == 'POSTALAMAK':
kullanıcı adı = istek POSTALAMAK['Kullanıcı adı']
şifre = istek. POSTALAMAK['şifre']
kullanıcı = kimlik doğrulama (istek, kullanıcı adı=kullanıcı adı, parola=şifre)
eğer kullanıcı dır-dirOlumsuzHiçbiri:
giriş (istek, kullanıcı)
geri dönmek HttpResponse("Giriş başarılı")
başka:
geri dönmek HttpResponse("Geçersiz kimlik bilgileri")
başka:
# Giriş formu oluştur
geri dönmek HttpResponse("Giriş Formu")
bu login_view işlevi, oturum açma sürecini yönetir. Bir kullanıcı kimlik bilgilerini gönderdiğinde, kimlik doğrulama işlevi bunları doğrular. Kimlik bilgileri geçerliyse, oturum açma işlevi kullanıcı için bir oturum oluşturarak uygulamanın kısıtlı alanlarına erişmelerine izin verir. Kimlik bilgileri yanlışsa, kod bir oturum oluşturmaz.
Kullanıcı Yetkilendirme
Kullanıcı yetkilendirmesi, bir kullanıcının uygulama içinde hangi eylemleri gerçekleştirebileceğini belirler. Django, kullanıcı erişimi üzerinde kontrol sahibi olmanızı sağlayan esnek bir izin sistemi sağlar.
itibaren django.contrib.auth.decorators içe aktarmak izin_gerekli
itibaren django.http içe aktarmak HttpResponse
@permission_required('anketler.can_vote')
kesinlikleoy(rica etmek):
# Burada oylama mantığı
geri dönmek HttpResponse("Oy kaydedildi")
Yukarıdaki örnekte, @izin_gerekli dekoratör, yalnızca anketler.can_vote izin oy görünümüne erişebilir. Gerekli izne sahip olmayan bir kullanıcı görünüme erişmeye çalışırsa, erişimi reddedilir.
Özel Ara Yazılım Uygulama
Ara yazılım, web sunucusu ile görünüm arasında yer alır. Özel ara yazılım uygulamak, ek güvenlik denetimleri ekler veya istekleri ve yanıtları değiştirir. Bu, HTTPS'yi zorunlu kılmak gibi nedenlerle olabilir.
itibaren django.http içe aktarmak HttpResponsePermanentRedirect
sınıfEnforceHttpsAra Yazılım:
kesinlikle__içinde__(kendisi, get_response):
self.get_response = get_responsekesinlikle__Arama__(kendisi, istek):
eğerOlumsuz request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
secure_url = url.değiştir(' http://', ' https://')
geri dönmek HttpResponsePermanentRedirect (güvenli_url)
geri dönmek self.get_response (istek)
Yukarıdaki ara yazılım, isteğin şu aracı kullanıp kullanmadığını kontrol eder: güvenli yöntem. Değilse, şuraya yönlendirir: URL'nin HTTPS sürümü.
Güvenli Dosya İşleme
Dosya işleme, web uygulamalarında yaygın bir özelliktir. Düzgün bir şekilde güvence altına alınmadığı takdirde güvenlik riskleri oluşturur. Kullanıcı tarafından yüklenen dosyaları işlerken, dosya içeriklerini doğrulamak önemlidir. Bu, kötü niyetli yüklemeleri önler. Django'nun FileExtensionValidator'ını kullanarak dosya türlerini doğrulayabilirsiniz.
itibaren django.core.doğrulayıcılar içe aktarmak Dosya Uzantısı Doğrulayıcı
itibaren django.forms içe aktarmak formlar
sınıfDosyaYüklemeFormu(formlar. Biçim):
dosya = formlar. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', "belge"])])
Yukarıdaki kod bloğunda, DosyaYüklemeFormu sınıf kullanır Dosya Uzantısı Doğrulayıcı yalnızca PDF ve DOCX dosya yüklemelerine izin vermek için. Uygulama, yükleme sırasında diğer tüm dosya formatlarını reddedecektir. İzin verilen uzantıları uygulamanızın gereksinimlerine göre özelleştirin.
CSRF Koruması
Django'nun yerleşik CSRF korumasını kullanarak Siteler Arası İstek Sahteciliği (CSRF) saldırılarını önleyebilirsiniz. Şablonunuza şunları eklemelisiniz: CSRF belirteci bu sunucu tarafında geçerli olacaktır.
kullandığınızda % csrf_token % şablon etiketi, Django, CSRF belirteci ile gizli bir giriş alanı oluşturur. Bu belirteç, her kullanıcı oturumu için benzersizdir. Gönderilen formun doğruluğunun doğrulanmasına yardımcı olur.
Sunucu tarafı, form gönderimini işlerken CSRF belirtecini kontrol eder. Belirteç eksik veya geçersizse, Django bir Yasak (HTTP 403) hatası verir. Uygulamanızın bu tür güvenlik açıklarına karşı güvende olduğundan emin olmanız önemlidir.
Güvenli Formlar Yazma
Form oluştururken, kullanıcı girişini güvenli bir şekilde işlemek önemlidir. Bu, SQL enjeksiyonu ve XSS saldırıları gibi yaygın güvenlik açıklarını önlemek içindir. Aşağıda, Django'da nasıl güvenli bir form oluşturabileceğinizi gösteren bir örnek verilmiştir.
itibaren django içe aktarmak formlar
itibaren django.utils.html içe aktarmak kaçmaksınıfGüvenliForm(formlar. Biçim):
isim = formlar. CharField (maks_uzunluk=100)
e-posta = formlar. EmailField()kesinlikletemiz_adı(kendi):
isim = self.cleaned_data['isim']# Kullanıcı girişini dezenfekte edin
sanitized_name = kaçış (isim)
geri dönmek sanitized_namekesinlikletemiz_e-posta(kendi):
e-posta = self.cleaned_data["e-posta"]# Kullanıcı girişini doğrulayın ve sterilize edin
eğerOlumsuz email.bitiyor("@example.com"):
artırmak formlar. Doğrulama Hatası("Geçersiz e-posta etki alanı")
sanitized_email = kaçış (e-posta)
geri dönmek sanitized_email
bu temiz_adı Ve temiz_e-posta yöntemler, kullanıcı girişini doğrular ve temizler. bu temiz_adı yöntemi kullanır kaçmak ad girişini temizleme ve önleme işlevi potansiyel XSS saldırıları.
bu temiz_e-posta yöntem, e-posta biçimini doğrular ve e-posta etki alanını şu şekilde kısıtlar: örnek.com. yükseltir Doğrulama Hatası e-posta belirtilen kriterleri karşılamıyorsa. Bu eylem, formlarınızın güvenliğini artırır ve onları yaygın güvenlik açıklarına karşı korur.
Web Uygulama Güvenlik Açıklarını Anlamak Önemlidir
Web uygulaması güvenlik açıklarını anlamak, uygulamanızın güvenliğini sağlamanıza yardımcı olacaktır. Bunu, uygulamadaki potansiyel zayıf noktaları belirlemenize ve ele almanıza yardımcı olarak yapacaktır. Bu da başarılı saldırı olasılığını önemli ölçüde azaltacaktır.