Bilindiği üzere web.config; bir ASP.NET uygulamasının bir çok konfigürasyonunun yapılabildiği XML tabanlı bir dosyadır ve uygulamaya ait spesifik ya da genel ayarlar burada tutulmaktadır.ASP.NET ile geliştirilen bir web uygulamasının derlenerek publish edilmesi, kodların gizliliğini sağlasa da web.config dosyası derlenmemektedir. Biz de bu makalemizde web.config dosyasının içeriğindeki bölümlerin nasıl şifreleneceğini göreceğiz.Şifreleme Yöntemleri Nelerdir?
– Bu şifreleme işlemi için DPAPI (Data Protection Application Programming Interface) veya RSA kullanılmaktadır.- DPAPI ile şifreleme yaparken DataProtectionConfigurationProvider kullanılırken, RSA için ise RSAProtectedConfigurationProvider kullanılmaktadır.- Şifreleme makine bazlı ya da kullanıcı bazlı yapıldığından, başka bir sistem üzerinde çalışmasını sağlamak için şifrelemeyi o sistem üzerinde tekrar yapmak gerekecektir. (Bkz. machine key)- Ayrıca web.config içerisindeki bazı sectionlar şifrelenememektedir.Kaç Şekilde Şifreleme Yapılabilir?
İki şekilde yapılabilir. Visual Studio Command Prompt veya Windows Command Prompt`dan aspnet_regiis.exe uygulamasını ilgili parametreler ile çalıştırarak ya da uygulamanızın içinden programatik olarak yapabilirsiniz.aspnet_regiis.exe ile Şifrelemek
Bu uygulama ile şifrelemek için şuradaki makaleyi okuyabilirsiniz.Programatik Olarak Şifrelemek
web.config dosyamızda şifreleyeceğimiz section`ı oluşturuyoruz / belirliyoruz.
System.Web.Configuration`ı sayfamıza ekliyoruz ve şifreleme fonksiyonumuzu yazıyoruz; private void SifreleAslanim(string NereyiSifreleyim, string NeIleSifreleyim){//Uygulama dizinimizdeki web.config dosyasına erişiyoruzConfiguration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);//Hangi section`u şifreleyeceğimizi belirliyoruzConfigurationSection section = config.GetSection(NereyiSifreleyim);if (section != null && !section.SectionInformation.IsProtected){section.SectionInformation.ProtectSection(NeIleSifreleyim);config.Save();}}
Ve fonksiyonumuzu çalıştırıyoruz;SifreleAslanim(“appSettings”, “DataProtectionConfigurationProvider”);
web.config dosyamıza bakıyoruz; AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAsQxvcnc0GUS3DK3hpLPZ1wQAAAACAAAAAAADZgAAqAAAABAAAADwqim5UlKmK0+kXBrQpHA8AAAAAASAAACgAAAAEAAAALrJpAOn1+EdVDU/9kkEzargAAAAOJqWAX/tTNvOBPZ/tqN2SE7dMCHVLOKTFdyTx6laWc5Tw5jcUihcbhcX73KhGT2CSVyHosXb7m+iQwZEtFEBJqEACq+2hM/QrxFr+DZaFdjBMu7Eg+AfXFIfGkuQv1UCCnHVnfQJdlyqF3unKzkqGuppH0Ez15+doNOnXjZ+qLKRB6Dg2C+fSbIRHje5an5K7+6YWcAimdu9oep4I7GgUndghVzwLoqltv7/Pvj6vGP6hQpugU9f48E2jrztPoqz65cINW4OZ3SGC9Ul402781cdTmY+rq+npLal8yzpoYAUAAAAe7RSzjpGiQkEcAqwDag459eDxi4=



Görüldüğü gibi belirttiğimiz section belirttiğimiz algoritmaya göre şifrelenmiş. Peki veriye ulaşmamız gerektiğinde şifreyi çözecek miyiz? Hayır. Direkt olarak appSettings düğümünde tanımladığımız key ile ulaşmamız mümkün;string strKey = WebConfigurationManager.AppSettings[“User”].ToString();Response.Write(strKey);
Ekrana şifresiz bir şekilde yazdırıldığını görüyoruz.Programatik Olarak Şifreyi Çözmek
Yine uygulama tarafında çalışacak olan DeCrypt fonksiyonumuzu yazarsak;private void CozAslanim(string NereyiCozeyim){//Uygulama dizinimizdeki web.config dosyasına erişiyoruzConfiguration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);//Hangi section`u çözeceğimizi belirliyoruzConfigurationSection section = config.GetSection(NereyiCozeyim);if (section != null && section.SectionInformation.IsProtected){section.SectionInformation.UnprotectSection();config.Save();}}
Fonksiyonumuzu çalıştırıyoruz;CozAslanim(“appSettings”);
appSettings düğümünün decrypt edildiğini ve salt halinin tekrardan web.config dosyamıza kaydedildiğini görüyoruz.