19 Kasım 2012

app.config kullanımı, faydaları, güvenlik, connection string

Başlangıç seviyesi için detaylı araştırdım ve türkçe olarak sunuyorum :)

"app.config", istediğimiz kurulum özellikleri içeren, küçük projelerde kendisine ihtiyaç duymadığımız, xml tabanlı dosyadır. Birtakım özellikleri kodun içine gömmek yerine, app.config dosyasına yazarız.

Yararları :
  • Standartlaşmayı başarmıştır kendisi... Grup olarak çalıştığınız projelerde kolaylık sağlar, ya da yazdığınız bir projeye başkası devam etmek zorunda kaldığında, "Allah razı olsun" dedirtir :)
  • Büyük projelerde kod tekrarını azaltır.
Başta görünen yararları bunlar. Özellikle veritabanı bağlantısı kurulacağı zaman "connectionstring"in app.config dosyasına yazıldığını yoğun olarak görmüşsünüzdür. 

Burada aklıma şu takıldı : 
"connectionstring"i değişmemiz gerektiği zaman ya da birden çok yerde kullanmamız gerektiği zaman yararlı(exe'ye dokunmadan app.config üzerindeki değişiklik ile işimiz hallolur); ama veritabanı bağlantısı bilgilerimi neden app.config dosyasına yazıp da bilgilere rahatça ulaşılmasına neden olayım ki ? ( Kodun içerisine gömdüğümüz zaman exe'yi ya da dll'i decompile edip biraz uğraştırmak varken :)) 

Microsoft amca, bunu tabi ki düşünüp "connectionstring"i şifreleme methotlarını da bizlerden eksik etmemiş.

Geçelim uygulamalara :

Öncelikle app.config ile connectionstring kullanımından başlayalım, daha sonra şifreleme işlemlerine geçelim:


  • İlk olarak projenize System.Configuration referansını ekliyoruz ve kullanacağımız classta using System.Configuration; eklemeyi unutmuyoruz :)

  • Ctrl + Shift + A   yaparak açılan pencerede Application Configuration File seçip ismini değiştirmeden dosyamızı oluşturup projemize ekliyoruz.

  • app.config dosyamızı aşağıdaki gibi kendi bilgilerinizle dolduruyorsunuz, username ve şifre kullanıyorsanız, connectionstringe ekleyin...
<configuration>
  <connectionStrings>
    <add name="MyDBConnectionString" connectionString="server=.\SQLEXPRESS;database=db_deneme;trusted_connection=true;connection timeout=30"/>
  </connectionStrings>
</configuration>
  •  Kodumuzda çağırırken de ;
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString);
try
{
 conn.Open();
}
catch (Exception)
{
 MessageBox.Show("!!! Veritabanı bağlantısı kurulamadı.");
}

Ve böylelikle, veritabanı bağlantısı için gerekli olan connectionstring'i app.config dosyasından çekmiş olduk.

---------------------------------------------------------------------

Şimdi gelelim, güvenlik konusuna... Güvenlik için connectionstring'i şifreleyen methoda göz atalım..


Configuration config = ConfigurationManager.OpenExeConfiguration("deneme.exe");

ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;


"deneme.exe" projemizin adının exe dosyası, default olarak debug klasörünün içinde olduğu için path vermiyoruz. Bu exe'nin app.config dosyası için "configuration" nesnesi oluşturduk ve bu nesnedeki "connectionStrings" isimli bölüm için de "section" nesnesi oluşturduk.

Section nesnesinin korumalı ise korumasız hale, korumasız ise korumalı hale getiren kodu aşağıda verelim :


if (section.SectionInformation.IsProtected)
{
 section.SectionInformation.UnprotectSection();
}
else
{
 section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
}


Son olarak config nesnemizi kaydedelim.


config.Save();

kendinize göre bu kodları projenize ekleyip, müşterinizin bilgisayarına kuracağınız zaman app.config dosyasını  şifreleyip korumalı hale getirebilirsiniz.

Not: app.config dosyası debug edildikten sonra "uygulamaismi.exe.config" olarak "debug" klasörüne kaydedilir, oradan korumalı haline bakabilirsiniz.


Umarım yardımcı olabilmişimdir, kolay gelsin...
yorumlarınızı eksik etmeyin :))


Bu Blogda Ara

İletişim

Ad

E-posta *

Mesaj *