Django'da Kriptografik İmzalama
Bir web uygulaması yazarken en başta gelen kurallardan biri harici kaynaklardan (kullanıcılardan) gelen veriye güvenmemek gerektiğidir. Ancak bazen veriyi bu harici ortamlardan geçirmek zorunda kalabiliyoruz. Django, bu harici ortamlardan geçirilmek zorunda kalınan verilerin doğruluğunu kontrol edebilmemize yarayan bir kriptografik imzalama arabirimi sağlıyor:
Örneğin, elimizde Twitter benzeri bir site var. Gönderi yapma formunun içinde giriş yapmış bir kullanıcının ID'sini hidden input olarak basmak zorunda kalıyoruz diyelim. Normalde yapacağımız şey değil böyle bir bilgiyi dışarıdan almak ama bir şekilde mecbur kalmışız. Form geri döndüğünde bu ID'nin değişmemiş olduğundan emin olmak istiyoruz. Kullanıcı formla oynayıp ID'yi değiştirerek sanki başkasıymış gibi gönderi yapabilir. İşte tam bu noktada işe yarıyor. O ID'yi imzalayıp basıyoruz formun içine, geri döndüğünde de değişmediğinden emin oluyoruz.
>>> from django.core.signing import Signer >>> signer = Signer() >>> value = signer.sign('My string') >>> value 'My string:GdMGD6HNQ_qdgxYP8yBZAdAIV1w'
Yukarıda 'My string' metnine bir imza ekledik. Görüldüğü üzere bu arabirim veriyi şifrelemiyor, hala görülebilir biçimde tutarak sonuna imza atıyor. Aynı sınıfın unsign metodu ile asıl metni geri alabiliyoruz:
>>> original = signer.unsign(value) >>> original u'My string'
Eğer imzada ya da verinin kendisinde bir değişiklik olursa bu metod BadSignature hatası fırlatıyor. Değiştiğini bu şekilde anlıyoruz.
Daha fazla bilgi için dökümantasyon şurada: https://docs.djangoproject.com/en/dev/topics/signing/












