Django Uygulamalarında Client-Site Security ve CSP

Bu hafta düzenlenen Siber Güvenlik Konferansı 2014’te “Son Kullanıcı Güvenliği ve CSP” başlıklı bir sunum gerçekleştirdim. Bunu sunumu gerçekleştirmekteki amacım, Türkiye’de gerçekleştirdiğim web uygulama güvenliği testlerinde şimdiye kadar bir kere bile CSP uygulanmamasıydı. Bu nedenle son kullanıcı güvenliğinin ne denli önemli olduğunu anlattım.

Ne zamandır aklımda olan bir iş olarak Django için CSP app’i geliştirmeyi planlıyordum. Lakin özgür yazılımın güzelliği yine, bir kere daha hayat kurtardı. Mozilla’nin github hesabında Django için CSP uygulaması bulunuyordu.

Son Kullanıcı Güvenliği ve CSP

Bu yazıda Content Security Policy kavramı anlatılmayacaktır. CSP hakkında detaylı bilgilere http://www.html5rocks.com/en/tutorials/security/content-security-policy/ ve https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Introducing_Content_Security_Policy adreslerinden erişilebilir.

Django ve Django-csp

Django uygulamalarına kolaylıkla entegre edilebilecek django-csp uygulamasına aşağıdaki linkten erişilebilir.

https://github.com/mozilla/django-csp

Aşağıdaki komutlar ile django-csp kurulur ve örnek bir django uygulaması oluşturulur.

Settings.py dosyasında aşağıdaki modifikasyon gerçekleştirlir. django-csp middleware olarak eklenmelidir.

Uygulama genelinde çalışacak şekilde Content Security Policy aktifleştirilmiş bulunmaktadır. Artık istediğimiz CSP kuralını settings.py dosyasına tanımlayabiliriz.

Yukarıdaki örnek tanımlamalar settings.py dosyasında yazılmıştır. Uygulamadan gelen HTTP cevabı aşağıdaki şekildedir.

Görüldüğü üzere yapılan CSP tanımlamalar django uygulaması tarafından uygulanmıştır.

Tanımlanabilecek tüm CSP header değişkenleri aşağıdaki listede belirtilmiştir.

 

Methodlara Özgü CSP Tanımlamaları

Eğer herhangi bir özel durum için belli view fonksiyonlarında farklı CSP kuralları çalıştırılması gerekiyorsa, django-csp bu ihtiyacı kolaylıkla gidermektedir.

@csp_exempt decorator

csp_exemp decorator’u sayesinde ilgili view method’u için CSP kuralları devre dışı bırakılabilir.

 @csp_update decorator

csp_update decorator’u ile belirlenen herhangi bir CSP kuralı, decorator’un tanımlandığı view fonksiyonuna özgü şekilde değiştirilebilmektedir.

Örnekte myview isimli fonksiyon için resimlerin kaynağı imgsrv.com adresi olarak değiştirilmiştir. Bu dekoratör ile farklı kaynaklardan resim çağrısı yapan view’leri oluşturan fonksiyonlarda oldukça esnek ve güvenli bir yapı sağlanabilmektedir.

Sonuç

Özellikle e-ticaret ve start-up firmalar için harikulade bir framework. Son kullanıcı güvenliğini ( XSS, ClickJacking ve CSRF ) konusunda framework’ün kendi aldığı önlemler son derece güçlü ve güzel. Örneğin XFrameOptionsMiddleware ve CsrfViewMiddleware özelliklerinin default olarak aktif gelmesi, view dosyalarında ki değişken kullanımlarında default olarak output encoding’in yapılması son kullanıcı güvenliğini %90’a taşıyan özelikler. Bunların yanı sıra CSP kuralları uygulandığında %99 oranında son kullanıcı güvenliği sağlanabilmekte.