Makale Özeti

Web Uygulamalarında Güvenlik

Makale

ASP.NET Web Uygulamalarının Güvenliği-1

Temel Güvenlik Kavramları

Web uygulamarında kimlik denetimi (Authentication) yapmak dikkat isteyen ve karışık bir konudur. ASP.NET IIS (Internet Information Server) ve .NET Framework Kütüphanesi ile beraber kimlik denetimi için kendi içinde çözümler sunar.

 

Kimlik Denetimi (Authentication) ve Yetkilendirme (Authorization)

 

Kimlik Denetimi (Authentication) kullanıcıların tanımlanması aşaması, Yetkilendirme (Authorization) ise kullanıcının kimliği doğrultusundan erişim haklarını belirleme aşamasıdır.

 

Örneğin bir kullanıcı adı ve şifre ile bir ağ ortamına dahil olma işlemi Kimlik Denetimi, giriş yapılan kullanıcının bazı klasörlerde yazma izni olması bazılarında olmaması durumunda ise Yetkilendirme yapılmış olur.

 

Anonim (Anonymous) Erişim

 

Internet üzeriden bulunan web sitelerinin çoğunda anonim erişim kullanılır. Sitenin her bölümünün herkese açık olduğu ve sitenin gizli veya kişiye özel bilgi içermediği durumlarda web siteleri kimlik denetiminin yapılmadığı anonim erişim yöntemini kullanırlar. ASP.NET Web Uygulamaları anonim erişim için taklit etme (Impersonation) yöntemini kullanır. Kimliksiz erişim yapan kullanıcıya genel bir kullanıcı hesabı atanması yapılarak yetkilendirme yapılır. Varsayılan olarak bu kullanıcı hesabının adı ISUR_makineadi şeklindedir. Bilgisayarın ismi Cengiz olduğu zaman anonim erişim için kullanılan kullanıcının adı ISUR_Cengiz olur.

 

Bu kullanıcının verilen yetkiler anonim erişim yapan kullanıcıya verilmiş olur. Bu kullanıcı varsayılan olarak Guests kullanıcı grubuna üyedir. Kullanıcı ile iligili işlemler için Computer Managament konsolunu kullanalılabilir. Güvenlik açısından bu kullanıcı sistem yönetimi yetkisi alacağı gruplara dahil edilmemelidir. Bazı durumlarda web uygulaması için gerekli olan klasörlerinize erişim yetkisini artırmanız gerekebilir. (yazma izni gibi)

 

 

Kimlik Denetimi ile Erişim

 

Anonim erişim herkese açık olan bilgileri içeren sayfalar için kullanılabilecek en iyi yöntemdir. Fakat web uygulaması özel bilgileri, kişiye özel bilgileri veya sadece yetkisi olanların görmesi gereken bilgileri içeriyor ise kullanıcı kimlik denetimi ve yetkilendirmesi  yapılmalıdır.

 

ASP.NET Kimlik Denetimi Yöntemleri

Kimlik denetimi yapabilmek için ASP.NET’ in kendi içinde bazı kimlik denetimi yöntemleri vardır. Bunlar Windows tabanlı, Form tabanlı ve Microsoft Passport tabanlı kimlik denetim sistemleridir

 

Microsoft Passport kimlik denetim sistemi tek kullanıcı adı ve şifre ile çok sayıda siteyi kullanama amacı ile çalışan Microsoft’un Passport.com sistemi üzerindeki kullanıcı adı ve şifre ile çalışan özel bir yöntemdir. Bu yöntemin kullanımı ile ilgili ayrıntılı bilgiyi Microsoft Developer Network (MSDN) içerisinden bulabilirsiniz.

 

Windows tabanlı kimlik denetim sistemi ile ASP.NET kullanıcının kimlik denetim işlemi için Windows işletim sistemini kullanır. Kullanıcı kayıtları sunucunun kullanıcı listesi üzerinden yapılır.

Kullanıcı Windows kimlik denetimi ile korunan bir sayfaya istekde bulunduğu zaman IIS kullanıcının kimlik bilgilerine bakar eğer bu bilgiler geçerli değil ise istek reddedilir ve kullanıcı giriş formuna kullanıcı adı ve şifresini tekrar girmek zorunda kalır. Kimlik bilgileri IIS tarafından doğrulandığı zaman kullanıcı sayfaya erişebilir.

 

Form tabanlı kimlik denetim sistemi ile kullanıcı programcı tarafından oluşturulan bir Web Formuna yönlendirilir. Bu Web Formunda girilen kimlik bilgileri (kullanıcı adı ve şifre gibi) program kodu ile web.config dosyasından tanımlanan kullanıcı listesinden veya programcının düzenlediği bir veritabanından denetlenir.

 

Uygun Kimlik Denetim Sistemini Seçmek

 

Anonim erişim yapılacak web uygulamasının herkese açık olduğu durumlarda kullanılmalıdır. Örneğin bir ürünün kullanım kılavuzunun yardım sayfalarının yer aldığı bir uygulama.

 

Windows tabanlı erişim şirketlerde çalışanların Windows kullanıcı hesapları ile erişebileceği uygulamalar için kullanılabilir. Örneğin şirket çalışanlarının kullanımı için hazırlanan Intranet’de çalışacak bir muhasebe programı Windows tabanlı kimlik denetimi kullanılarak hazırlanabilir.

 

Form tabanlı kimlik denetimi internet üzerinden erişilecek sitelerde kimlik denetimi yapmak için kullanılır. Örneğin bir alış veriş sitesi, üyelik ile erişilebilen içeriğe sahip olan siteler gibi uygulamalar için bu yöntem kullanılabilir.

 

Web.Config Dosyasının Güvenlik Ayaları Açısından Temel Yapısı

 

Web uygulamasının güvenlik ayarlamaları yapılırken öncelikle kullanılacak kimlik denetim sistemi belirlenir. Kimlik denetim sistemi belirlendikten sonra yetkilendirme işlemi yapılır. Bu işlemler Web.config dosyasından yapılmaktadır.

Web.config dosyası XML formatındadır. XML yazım kuralları çerçevesinde düzenlenmelidir.

 

Kimlik denetim sisteminin belirlenmesi için <authentication> düğümü, yetkilendirme işlemi için <authorization> düğümü kullanılır.

 

Her iki düğümde <configuration> düğümü içerisindeki <system.web> düğümü içersinde yer alır.

 

<authorization> Düğümü

 

Bu düğümde kimlik denetim sistemi belirlenir. Bu düğüm seçilen kimlik denetim sistemine göre alt düğümler içerebilir. Örneğin kimlik denetim sistemi olarak Forms seçildiği zaman bu denetim sisteminin ayarları için <authorization> düğümünün alt düğümü olan <forms> düğümü kullanılır.

 

<authentication 

mode="Windows|Forms|Passport|None">
   <forms name="formismi"
          loginUrl="girissayfasiadresi" 
   protection="All|None|Encryption|Validation"
          timeout="30" 

path="/"
          requireSSL="true|false"
          

slidingExpiration="true|false">
      <credentials 

passwordFormat="Clear|SHA1|MD5">
         <user 

name="kullaniciadi" password="sifre"/>
      </credentials>
   </forms>
   <passport 

redirectUrl="internal"/>

</authentication>

 

Yukarıda <authentication> düğümünün özellikleri ve alt düğümleri gösterilmektedir.

 

 

<authorization> Düğümü

 

Bu düğümde kullanıcılara, rollere ve yapılacak eylemlere verilecek izinler ve uygulanacak kısıtlar belirlenir.

 

<authorization>
   <allow users="kullanıcıların listesi"
          roles="rollerin listesi"
          verbs="eylemlerin listesi" 

/>
   <deny users="kullanıcıların listesi"
         roles="rollerin listesi"
         verbs="eylemlerin listesi" 

/>
</authorization>
 

 

<allow> Düğümü

Uygulama kaynağına erişim izni verilmesi ayarlanır.

 

users özelliği virgül ile ayrılmış birden fazla değer içerebilir. Soru işareti (?) anonim erişime izin verir, yıldız işareti (*) ile tüm kullanıcılara izin verilir.

 
roles özelliği virgül ile ayrılmış 

birden fazla değer içerebilir. Yetki verilecek roller belirlenir.
 

verbs özelliği virgül ile ayrılmış HTTP transfer metodlarını içerebilir. Burada belirtilen metodların uygulanmasına izin verilmiş olur. ASP.NET’de tanımlanmış eylemler şunlardır: GET, HEAD, POST, and DEBUG.

 

<deny> Düğümü
Uygulama kaynağına erişim kısıtlamaları ayarları yapılır.
 
users özelliği virgül ile ayrılmış 

birden fazla değer içerebilir. Soru işareti (?) anonim kullanıcıların erişimini engeller, 
yıldız işareti (*) ise tüm kullanıcıların erişimini engeller.
 
roles özelliği virgül ile ayrılmış 

birde fazla değer içerebilir. Erişimi kısıtlanacak roller belirlenir.
 

Cengiz HAN
Microsoft ASP.NET MVP
msn (ve email) : cengiz@cengizhan.com
e-mail : cengizh@yazgelistir.com