-- ASP.NET, Güvenlik, Veri Güvenliği

ASP.NET’de Web Config Şifrelemek

Tüm yazılım projelerinde güvenlik ve performans en kritik basamakları temsil eder. Bu makalemizde güvenlik basamağından devam edeceğiz. Bir masaüstü yazılım bilgisayarda kurulup kullanılacağı için istemci tarafındaki kullanıcının bilgi ve merak seviyesine göre belirli bir güvenlik riskine sahibiz. Web tarafında da benzer şekilde bir problem söz konusu. Veritabanına erişme saldırıları, sunucu yönetimini ele geçirme vb. bir çok problem söz konusu. Web tarafındaki bir diğer problemde sunucuyu yöneten X kişileridir. Örneğin, Web.Config dosyasını istemci tarafından okumak ya da indirmek mümkün olmasa da, yazılımımız bir sunucuda bulunduğuna göre, bu dosyayı okumaları da mümkün olacaktır. Sonuç olarak bir XML dosyasıdır. Bu makalemde Web.Config dosyasının güvenliğini artırmak için nasıl şifreleyebileceğimize bakacağız.

<configuration> boğumu içerisindeki <connectionStrings> boğumu aşağıdaki gibidir.

<connectionStrings>
<add name="MovieDBConnString" connectionString="Data source=.;Initial Catalog=MovieDB;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>

Görüldüğü gibi aşikar bir şekilde çok kritik olan bağlantı katarımız(connection string) görülebilmektedir.

Öncelikle, bu işlemleri yapabilmek için şu 2 namespace’e ihtiyacınız var.

using System.Configuration;
using System.Web.Configuration;

Şimdi bağlantı katarımızı Encryption işlemine tabi tutarak şifreleyelim.

            Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
            ConfigurationSection configSection = config.GetSection("connectionStrings");
            if (configSection != null)
            {
                configSection.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
                config.Save();
            }

Yukarıdaki kodu bir metod olarak kullanabilirsiniz.

Şifreleme işleminden sonra Web.Config dosyası aşağıdaki gibi olacaktır.

  <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA0SxLWBlzgkixV/zdko3sCAQAAAACAAAAAAAQZgAAAAEAACAAAABeALxe5qnCbdl/T7TIwCjE2+mUc/b2/izjsAhxTijjQAAAAAAOgAAAAAIAACAAAAAAJa7Gs9+m4ctQCSEfG2TvAyi2zZ9WmvR9hXxQDIzjcJABAABSzCXqjjbhlHvjpSfeRLs62S2QvUZYjTZyM9MfY46e446Qoa67k3dlqWmypEYRV8CeX20MG9wQQxObx9MDpVHN5zqqas9wiG8QoQnGjpuOfTjs5SvEqdagIXSERvetFhGbLE32pWBkEfWkzSZDPZ3kli7RddAqwdyS9bJiuYKv3OhYWNp+TzdaEn9LY0CqybTLdvJ8e1HjnHmSbyVvZfZeYQBOKcv1AE/LacQaEWSdRkArqaiF4lHOMS6bPInRGq246hEe49tzFZoneKklYYD1d2hz4E5dcAQUACWXCUpRx7ZBWoz6OW1ifQ3ibDNJDMvG3RdbbP559jy+tXNHMx5JEn56pAv4stTs9eEM5+TSPlOX1X6C1FNwfW5RM+vyXt6Ll+1U648ojrECWH7rPNRszKtIjOj6xIueaEEGMkP6QIzwatWFUb17Gui6A3or20Z4K1Q/9pGVwTnJU1F4O8jj/Xrws7W3VDcRBOJPA4Wx//+QHevR4y4rwKFLud2XSPv4FTbEP04Z8UMZuf/5jEwzQAAAAMkXU0IAMFfSHfH+eoq7IyoMa9E8T5fj33J6ImIqE8rE8YoO4y5H3GMsd7mfQb274l0H7nQ5c5zN84Ecd9acpeU=</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>

Bu işlemi tersine çevirmek için de Decryption işlemi gerçekleştirebiliriz.

            Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
            ConfigurationSection configSection = config.GetSection("connectionStrings");
            if (configSection.SectionInformation.IsProtected)
            {
                configSection.SectionInformation.UnprotectSection();
                config.Save();
            }

Bu kodları çalıştırdığınızda Web.Config dosyanızın eski haline döndüğünü görebilirsiniz.

İyi çalışmalar.

Yorumla

Yorum