web.config Dosyası Özellikleri

Eyl 06, 2013

ASP.NET’in en güzel yanlarından biri güçlü yapılandırma sistemidir. Bu yapılandırma sistemi XML tabanlı dosyalar kullanır ve "web.config" adlı dosyada saklanır. Bir ASP.NET uygulamasına herhangi bir web.config dosyası eklenmediğinde varsayılan olarak, sistem klasorleri altındaki, Microsoft Framework ile gelen machine.config dosyasından yapılandırmayı kalıtımla alır. Lakin bu hiçbir zaman yeterli değildir. Zaten Visual Studio.NET’de Visual Web 2005 de temel yapılandırmalara sahip birer Web.config dosyası oluşturulmuştur.

Web uygulamaları internet tabanlı olduğundan tüm internet kullanıcılarına açıktır, fakat bu tüm kullanıcıların bir sitedeki tüm bölümlere erişme hakkına sahip olduğunu göstermez. ASP.NET, içerisinde bulunan "Forms Authentication (Form Kimlik Denetimi)"ın güçlü özellikleri ile daha az kod ve çaba ile karmaşık kimlik denetimini kurmada kolaylık sağlamaktadır.

Yukarıdaki şemada da görüldüğü gibi ziyaretçi bölümü herkese açıktır. Burayı siteye kimlik denetimi yapmadan (kullanıcı girişi yapmadan) herkes görebilir. "Admin (yönetici)" bölümü, "Manager (düzenleyici)" bölümü ve "User (kullanıcı)" bölümüne login.aspx sayfasından giriş yaptıktan sonra veritabanında yeralan "user" tablosundaki rollere göre yetkilendirme yapılıp girilebilir. Bir ASP.NET Web uygulamasını, uygulamanın tümüne sadece sisteme giriş yapmış olanların girmesini sağlamak için ilk önce authentication (kimlik denetleme) yöntemi belirlenmelidir. Burada "forms authentication" modu kullanılacaktır (Login.aspx.cs dosyasına System.Data.SqlClient ve System.Web.Security ad uzaylarının yazılması unutulmamalıdır.)

Ayarlanan bir web uygulamasında tüm uygulama üyelik girişi yapmış ya da yapmamış herkesin kullanımına açıktır.Uygulamanın sadece oluşturulan "UyeGirisi.aspx" ile sisteme giriş yapmış olan kullanıcıların uygulama sayfalarını görebilmesini, kimliği belirsiz olan kullanıcların (yani sisteme giriş yapmamış olan kullanıcıların) sayfaları görememesinin sağlanması için aşağıdaki şekilde "web.config" dosyası düzenlenmelidir.

Burada authorization(yetkilendirme) düğümü içerisindeki "deny (reddet)" düğümü ile sisteme giriş yapmamış olan (anonim) kullanıcıların yasaklaması belirleniyor. Soru işareti (?) karakteri anonim kullanıcıları temsil eder. Ayrıca (*) karakteri ise tüm kullanıcıları temsil eder.

Not : <compilation> (derleme) düğümü VS.NET'in web uygulamasını debug (hata ayıklama) modunda çalıştırabilmesi için gereklidir.

Authorization Düğüm Yapısı:

Authorization düğümü ile uygulamanın kimlik denetim sistemi tanımlanır. Kimlik denetim sisteminin tanımlanması ile herhangi bir güvenlik kısıt getirilmiş olmaz. Uygulamanın tümüne veya bir bölümüne erişimleri kısıtlamak için authentication düğümü kullanılmalıdır. Authentication düğümü ile herhangi bir kısıtlama yapılmadıysa uygulamaya erişim ASP.NET katmanında kısıtlanmamıştır. Bunun için mutlaka authentication düğümü ile kısıtlama işlemi yapılmalıdır.

 

<authentication mode=”Windows|Forms|Password|None”>
    <forms name=”name”
               loginUrl=”url”
               protection=”A11|None|Encription|Validation”
               timeout=”30” path=”/”>

Authentication Düğüm Yapısı:

<authorization>
   <allow users=”comma-seperated list of users”
             roles=”comma-seperated list of roles”
             verbs=”comma-seperated list of verbs”/>

    <deny users=”comma-seperated list of users”
             roles=” comma-seperated list of roles”
             verbs=” comma-seperated list of verbs”/>
</authorization>     

Şekilde gözüktüğü gibi ayarlanan bir web uygulamasında tüm uygulama üyelik girişi yapmış ya da yapmamış herkesin kullanımına açıktır. Sisteme giriş yapmamış olan kullanıcıların sayfaları görememesini sağlamak için web.config dosyası aşağıdaki şekilde düzenlenmelidir.

Soru işareti (?) karakteri anonim kullanıcıları temsil eder. Ayrıca (*) karakteri ise tüm kullanıcıları temsil eder.

CustomErrors Düğümü : 

CustomErrors ile bir hata oluştuğu zaman kullanıcıya daha oluşan hatayı göstermeden sadece hata olduğunu bildiren bir sayfa gösterip, kullanıcı dostu bir web uygulaması oluşturulabilir ya da en azından ayrıntılı hata mesajını kullanıcının görmesini engellemek için kullanılabilir. Böylelikle herhangi bir hata olursa uygulamadan "hata.aspx"in gösterilmesi istenir.

CustomErros Düğüm Yapısı :

<customErrors defaultRedirect="ur1  mode="On|Off|RemoteOnly">
      <error statusCode="statuscode" redirect="ur1"/>
</customErrors>

<CustomErrors> düğümü de <system.web> düğümü içerisinde yer alır.
CustomErrors düğümünün mode (durum) özelliğinin alabileceği değerler ve işlevleri şunlardır: 
• On: Her zaman özel hata sayfasını göster. 
• Off: Her zaman ASP.NET 'in otomatik oluşan, hata hakkında bilgi içeren sayfasını göster. 
• RemoteOnly: Sadece sunucu üzerinden (yani local(yerel), yani sunucunun klavyesine erişen kişiler tarafından) yapılan erişimler ASP.NET ayrıntılı mesajını göster, siteye uzaktan bağlanan kişilere özel hata mesajını göster (yani ayrıntılı hata mesajını gösterme).
Eğer önceden tahmin edilen bir hata olduğunda hataya özel bir sayfa görüntülenmesi istenirse aşağıdaki gibi bir "CustomErrors" düğümü ile halledilir.

Yukarıdaki kod parçası ile 404 numaralı hata olduğunda kullanıcının sayfayok.htm adresine gönderilmesi ayarlanmıştır. Bu, hata olmayan bir dosyaya istek geldiği zaman oluşur.

Connectionstrings: 

Bağlantının yapılabilmesi için gerekli olan, hangi ana makineye bağlantı yapılacağını, o ana makinedeki hangi veritabanına bağlanılacağını, o veritabanına bağlanmak için gerekli olan kullanıcı adı ve şifresi gibi bilgilerin tutulduğu bir kod parçasıdır.
Web.Config dosyasının içerisine girilip "appSettings" sekmesinin ayarları aşağıda belirtileceği şekilde düzenlenmelidir.

<appSettings>
<add key = "testConnectionString" value = “Data Source = localhost; Initial Catalog = Northwind;User ID = Dogukan;Password = myPass;”></add>
</appSettings>

  1. <appSettings> kısmında projenin ayarları belirtilir.
  2. <add key = "testConnectionString" value = "…………………."> ifadesinde ise proje ayarlarında kullanılacak olan yeni bir anahtar eklenir. Burada "testConnectionString" eklenen anahtarın adı ( daha sonra proje içerisinden bu isimle çağrılacak), value (değer) ise "testConnectionString" isimli anahtarın değerini temsil etmektedir. Değere atananlar ise ana bağlantı cümleciğini oluşturmaktadır.
  3. </add> kısmında eklenen anahtar etiketi kapatılır.
  4. </appSettings> kısmında ise eklenen proje ayarları etiketi kapatılır.

web.config dosyası dışarıdan okunması engellenmiş bir dosyadır. Çok üst düzeyde işlemler yapılmadığı sürece (ana makineye uzaktan erişim sağlama vs. ) web browser’da Web.Config dosyası görüntülenemez. Bu yüzden ConnectionString’i Web.Config dosyası içerisinde tanımlamak güvenlik için önemli bir adımdır.

Yukarıdaki kod bloklarında da  görüldüğü gibi authentication mode "Forms" olarak ayarlanmaktadır, bu söz dizimi ile sitenin güvenlik modunun Form Tabanlı Güvenlik olduğu bildirilmektedir. Hemen alttaki satırda ise Form Tabanlı Güvenlik'in özel ayarları yapılır, "loginUrl" ile kimlik denetimi gereken bir yere erişilmeye çalışıldığında kullanıcının otomatik olarak kullanıcı adı ve parola girmesi gereken yönlendirilecek olan sayfanın yolu belirtilmekte ve  "name" alanında ise kullanıcın sistemine atılacak olan "Cookie"nin adı verilmektedir. "DefaultUrl" ile de kullanıcı direk "login" sayfasına girdiğinde geçerli kullanıcı adı ve şifreyi belirttikten sonra varsayılan olarak yönlendirileceği sayfanın yolu belirtilir.

AppSettings Düğümü:

Uygulamanın her noktasından erişilebilmesi gereken metinsel bilgileri saklamak için bu düğüm kullanılabilir. Burada genellikle sitenin iletişim için kullanılacak olan "e-posta" adresi, veritabanı bağlantısı için "connectionstring" ve uygulamada kullanmak için yazılacak bazı veriler saklanır.Web.config dosyasında gözüktüğü gibi appSettings düğümü system.web altında değil configuration düğümü altında yer alır.
 

Trace (İz)

Tracing web uygulamasının çalışma zamanındaki işlemler ile ilgili bilgilendirici mesajlar almayı sağlar. Bu mesajlar
programcıya problemleri gidermede, performans analizinde yardımcı olmaktadır.
Web.config dosyasındaki <trace> düğümü ile uygulama bazında trace ayarları yapılabilmektedir.

Trace (İz) Düğümü Yapısı

<trace enabled="true|false"
       localOnly="true|false"
       pageOutput="true|false"
       requestLimit="integer"
       traceMode="SortByTime|sortByCategory"/>

Bir uygulamada trace'i aktif hale getirmek ve sonuçların her sayfanın sonunda gözükmesi için aşağıdaki şekilde ayarlanmış bir trace düğümü yeterli olacaktır.