Makale Özeti

ASP.NET Web.Config dosyasında neler yapılabilir?

Makale


Keşf-i Web.Config -1

web.config dosyası bir ASP.NET web uygulamasının bir çok ayarının yapıldığı XML biçiminde bir dosyadır. XML tabanlı bir dosya olan web.config dosyasını düzenlemek için herhangi bir metin editoru yeterlidir. (bkz. Notepad☺) web.config dosyasında yapılan değişiklikler uygulamaya gelen bir sonraki istekde geçerli olur, uygulamanın yeniden derlenmesi gibi bir işleme gerek yoktur.

Xml tabanlı olmasından anlayacağımız gibi web.config dosyasında düğümler (node) ile dosya yapılandırması yapılır.

Not: XML dosyası formatında olan web.config  dosyası büyük küçük harf duyarlıdır.

Web.Config dosyası yapabileceğiniz ayarların bazıları aşağıdadır.

  • Kimlik denetim sistemini belirlemek ve uygualama kaynaklarına erişim yetki tanımlamalarını yapmak. (<authorization>ve <authentication>)
  • Uygulama da oluşabilecek hataların ziyaretçiye sunumu ile ilgili ayarlar. (<customErrors>)
  • Uygulamanın her noktasından erişilebilmesi gereken metinsel bilgileri saklamak. (<appSettings>)
  • Uygulamada oluşan hataları izlemek ve performans değerlendirmeleri yapabilmek için kullanılan Trace yapısının denetimi yapmak. (<trace>)
  • Uygulamanın bölgesel ayarlarının yapılması.(Örneğin uygulamanın varsayılan olarak kullanıcağı encoding sistemi, kısaca Türkçeleştirme için kullanırız diyebiliriz.) (<globalization>)
  • Uygulamadaki sayfalarda geçerli olacak bazı yapılandırmalar. (<pages>)
  • Uygulamanın oturum bilgileri yönetimi ile ilgili yapılandırmalar. (<sessionState>)

<authorization> ve <authentication> düğümleri

Authorization düğümü ile uygulamanın kimlik denetim sistemi tanımlanır. Burada tanımalanacak olan kimlik denetim sistemleri Forms, Windows veya Passport kimlik denetim sistemleri olabilir. 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 authencetion 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 authenction düğümü ile kısıtlama işlemi yapılmalıdır.

Bu iki düğümün alabileceği değerler ve tüm düğüm yapıları MSDN Documentationdan alınan aşağıdaki iki resimde gözükmektedir.

<authorization> düğüm yapısı

<authentication> düğüm yapısı

Bir ASP.NET web uygulamasını tümüne sadece sisteme giriş yapmış olanların girmesini sağlamak için ilk önce authentication yöntemi belirlenmelidir. Burada forms authentication mode kullanılacaktır.

Yukarıdaki şekilde gözüktüğü gibi ayarlanan bir web uygulamasında tüm uygulama üyelik girişi yapmış yada yapmamış herkesin kullanımına açıktır.

Uygulamanın sadece bizim oluşturduğumuz (bu makale burayı kapsamıyor) 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örememesini sağlamak için aşağıdaki şekilde web.config dosyamızı düzenleyelim.

Burada authorization düğümü içerisindeki deny 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 kullancıları temsil eder. Forms Authentication ayrıca işleyeceğimiz bir makale konusu olduğu için burada bu konunun ayrıntılarına inmiyorum.

Not: <compilation> düğümü VS.NETin web uygulamamızı debug (hata ayıklama) modunda çalıştırabilmesi için gereklidir.

<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 daha kullanıcı dostu bir web uygulaması oluşturulabilir. Yada en azından ayrıntılı hata mesajını kullanıcının görmesini engellemektir. Örneğin bir hata olursa hata.aspx i göstermesini isteriz uygulamamızdan.

customErros düğümü yapısı

Yukarıdaki resimde customErros düğümünün yapısı gözükmektedir. Bu yapıya bakıldığında anlaşılacağı gibi, bazı hata mesajların görüntülemesi istenen sayfalar tanımlanabilir.

Not: <customErrors> düğümü de <system.web> düğümü içerisinde yer alır.

customErrors düğümünün mode özelliğinin alabileceği değerler ve işlevleri:

  • 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, 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)

customErrors modu tanımlandıktan sonra özel hata sayfası oluşturulmalı ve bu yapılandırılmalıdır.

Sayfada herhangi bir hata olduğunda özel hata mesajının görüntülenmesini istediğimiz de web.config dosyamızda sytem.web düğümü altına aşağıdaki customErrors yapısını eklememiz yeterli olacaktır.

Yukarıdaki örnekde bir hata olduğunda uygulamanın ziyaretçisinin kim olduğuna veya hatanın ne olduğuna bakılmaksızın hatavar.htm sayfası görüntülenecektir.

Eğer önceden tahmin ettiğimiz bir hata olduğunda hataya özel bir sayfa görüntülenmesini istiyorsak aşağıdaki gibi bir customErrors düğümü işimizi görecektir.



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

Not: 404 hatasının ASP.NET çalışma zamanı katmanında yakalanabilmesi için sayfanın .aspx uzatılı bir ASP.NET sayfası olması gerekir.

Ayrıca bu özel hata sayfalarının sadece siteye uzaktan bağlanan kullanıcılara gözükmesini ama sunucuya local erişim yaparak bağlanan bana ise ASP.NETin oluşturduğu ayrıntılı hata sayfasının görüntülenmesini sağlamak için aşağıdaki gibi bir customErrors düğümünü gerek vardır.

Yukarıdaki resimdeki gözüken kod parçasındaki değişiklik mode değerinin RemoteOnly olarak değiştirilmiş olmasıdır. Daha öncede bahsettiğimiz gibi bu değer özel hata sayfalarının sadece siteye uzaktan bağlanan ziyaretçilere gösterilmesini, bize, yani sisteme local olarak erişen site sahibine ise ASP.NETin ayrıntılı hata mesajını göstermesini sağlıyor.

 

<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 email adresi, veritabanı bağlantısı için connectionstring, ve uygulamanızda kullanmak için yazacağınız bazı veriler saklanır.

Yukarıdaki örnek 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.

Not: Burada connectionstring saklamanı güvenlik açısından sorun olacağını söyleyenler olsa da, ASP.NET 2.0da connectionstrings diye bir düğümün ekleniyor olması Microsoft ASP.NET takımının bu şekilde düşünmediğini gösteriyor. :)

Buraya eklenen değerleri okuyabilmek için aşağıdaki gibi bir VB.NET kodu yeterli olacaktır.

Yukarıdaki kod ile appSettings düğümü içine eklenen emailAdresi düğümü içindeki değer okunup mailAdresi ismindeki değişkene yüklenir. Bu değişkende artık web.configde yazdığım gibi benim email adresim yüklüdür.

 

Web.Config ile yapılan işlemleri anlatacağım makalelerin birinicisi burada sona eriyor. Başta bahsettiğim diğer konuları bu makalenin devamı niteliğinde olacak diğer makalemde bulabilirsiniz.

Cengiz HAN
Microsoft ASP.NET MVP
cengiz@cengizhan.com