Posts Tagged ‘web.config’
Web.config Dosyasının İçeriğini Şifrelemek
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.
 <appSettings>
   <add key=”User” value=”Admin”/>
   <add key=”Pass” value=”password”/>  Â
 </appSettings>
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şiyoruz
       Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
       //Hangi section`u şifreleyeceğimizi belirliyoruz
       ConfigurationSection 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;
<appSettings configProtectionProvider=”DataProtectionConfigurationProvider”>
   <EncryptedData>
     <CipherData>       <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAsQxvcnc0GUS3DK3hpL
PZ1wQAAAACAAAAAAADZgAAqAAAABAAAADwqim5UlKmK0+kXBrQpHA8A
AAAAASAAACgAAAAEAAAALrJpAOn1+EdVDU/9kkEzargAAAAOJqWAX/tTNv
OBPZ/tqN2SE7dMCHVLOKTFdyTx6laWc5Tw5jcUihcbhcX73KhGT2CSVyHosXb7
m+iQwZEtFEBJqEACq+2hM/QrxFr+DZaFdjBMu7Eg+AfXFIfGkuQv1UCCnHVnfQJd
lyqF3unKzkqGuppH0Ez15+doNOnXjZ+qLKRB6Dg2C+fSbIRHje5an5K7+6YWcAim
du9oep4I7GgUndghVzwLoqltv7/Pvj6vGP6hQpugU9f48E2jrztPoqz65cINW4OZ3SGC9
Ul402781cdTmY+rq+npLal8yzpoYAUAAAAe7RSzjpGiQkEcAqwDag459eDxi4=
</CipherValue>
     </CipherData>
   </EncryptedData>
 </appSettings>
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şiyoruz
       Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
       //Hangi section`u çözeceğimizi belirliyoruz
       ConfigurationSection 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.
Yazar: Onur Yılmaz