Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Mustafa Erhan Ersoy
Mustafa Erhan Ersoy
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
14 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: altinda asp.net authentication ekrani erisim hatasi impersonation incelemeye kimlik kullanici kullanicinin sisteminde sunucu windows worker ASP.NET Mustafa Erhan Ersoy
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : İleri
Kategori : ASP.NET
Yayınlanma Tarihi : 16.4.2005
Okunma Sayısı : 53776
Yorum Sayısı : 3     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 28.3.2024
Turhal Temizer
Mac OS/X Removing CUDA 28.3.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 28.3.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 28.3.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET Güvenlik I - IIS Authentication
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
İnternet öncesinde güvenlik yazılım geliştirirken önem verilen bir konu değildi. İnternetin yayılması ile bilgisayarlar ve uygulamalar arası veri alışverişi arttı. Uygulamalar kaynaklarını, tanımlı kullanıcılara doğru şekilde iletebilmek üzere yazılmaya başlandı. Kullanıcı yönetimi çok daha önemli bir hale geldi.

Üç bölüm olarak hazırlamayı düşündüğüm ASP.NET uygulamalarında güvenlik konusunu incelemeye çalışacağımız ASP.NET Güvenlik dizisinde şu konulara değineceğiz :

  • IIS authentication metodları
  • ASP.NET authentication methodları ve authorization
  • Genel olarak web güvenliği ile ilgili programlama standartları
ASP.NET’te güvenlik genel olarak Şekil - 1 deki gibi iki aşamaya ayrılır. İlk aşamada, web sunucuya gelen HTTP çağrısının IIS tarafından karşılanır. IIS çağrıyı, web uygulamasının güvenlik ayarlarına göre kabul eder veya reddeder.
Eğer IIS çağrıyı kabul ederse ikinci aşamaya geçilir. Çağrı ASP.NET tarafından değerlendirilir. Bu iki aşama tamamen birbirinden ayrı çalışır.
Eğer IIS çağrıyı reddeder ise HTTP 401 hatası alırız. Bu makalede Şekil - 1’in ilk aşaması olan IIS kapsamındaki güvenlik ayarlarından bahsetmeye çalışacağız.


Şekil - 1. Kuşbakışı ASP.NET uygulamalarında güvenlik

Şimdi ASP.NET uygulamalarında güvenliği sağlamak için kullandığımız üç temel fonksiyonu tanımlayalım :

Authentication
Basitçe, kullanıcının, olduğunu söylediği kişi olup olmadığının kontrolüdür. Sıkı güvenlik önlemleri olan bir bina düşünelim. Binaya giriş yapabilmemiz için bina için tanımlı güvenlik sisteminde bir hesabımız olmalı. Ve giriş yaparken bir kimlik ile bu hesabımızı doğrulamamız gerekir. Sahip olduğumuz hesabı doğrulama işlemine authentication diyoruz.

Authorization
Sisteme giriş yapan kullanıcının istekte bulunduğu kaynağa erişim hakkı olup olmadığının kontrol edilmesine ise authorization diyoruz. Bina örneğimize dönersek, kimliğimizi gösterip binaya giriş yaptık. Şimdi, binanın bilgi işlem bölümüne girmek istiyoruz. Bilgi işlem bölümü kapısında bu bölüme girmek için yetkimiz olup olmadığı kontrol ediliyor. Eğer yetkimiz var ise bölüme girebiliyoruz. Yok ise bina içerisindeki başka kapıları deniyoruz. Bilgi işlem bölümü bizim için kaynak oluyor ve kaynağa erişimimizi sağlayabilmek için yeterli izinlere sahip olmamız gerekiyor.

Impersonation
Sisteme giriş yapan kullanıcının bir başkasıymış gibi yetkilendirilmesi fonksiyonuna impersonation denir. Binaya girerken kimliğimiz olmadığını söyledik ve ziyaretçi kartı aldık. İşte bu durumda impersonation yapmış olduk ve "ziyaretçi" kullanıcısının hakları ile sisteme giriş yapmış olduk.
ASP.NET uygulamalarında impersonation inaktiftir. ASP.NET uygulamamızda impersonation’ı aktif hale getirmek için web.config dosyamıza aşağıdaki tagi ekleyebiliriz :

<identity impersonate="true" />
Temel güvenlik fonksiyonlarımızı inceledikten sonra IIS authentication çeşitlerini incelemeye çalışalım. IIS güvenlik ayarları, IIS’te web uygulamamızı seçtikten sonra, sağ tıklayıp özelliklerine gözattığımızda dizin güvenliği tabının altında yeralır.


Şekil - 2. IIS web uygulaması güvenlik ayarları

Bu penceredeki authentication kontrolü olarak geçen düğme IIS authentication metodlarını ayarlamamızı sağlayan pencereyi açar.


Şekil - 3. IIS web uygulaması authentication ayarları

Şimdi bu pencerede gördüğünüz tüm authentication metodlarını incelemeye çalışalım.

Anonymous Erişim
IIS tarafında hiçbir authentication işleminin yapılmadığı moddur. Sunucudan istekte bulunan tüm kullanıcılara erişim açıktır. Anounymoun erişim metodunda IIS’te hiçbir authentication işlemi yapılmaz fakat tüm gelen çağrılar bir kimlik altındadır. IUSR_MakinaAdı kullanıcısı az yetkiye sahip bir kullanıcıdır ve anounymous erişim aktif ise web uygulamamıza iletilen kimliktir.

Şimdi yapacağımız basit uygulama ile uygulamamıza hangi kullanıcı ve şifre ile bağlandığımızı görmeye çalışalım. Aşağıda sunucu değişkenlerinden mevcut authentication tipini ve kullanıcı şifresini alıyoruz. Mevcut kullanıcı adını ise HTTP bağlamından elde ediyoruz. Mevcut kullanıcı adını sunucu değişkenlerinden de elde edebiliriz. Son olarakta ASP.NET Worker Process’inin hangi kimlik altında çalıştığını elde ediyoruz. Bu bilgileri uygulamamızda bir sayfaya yazdırarak authentication tiplerini ve aldığımız kullanıcı hesaplarını yorumlayalım.

private void Page_Load(object sender, System.EventArgs e)
{
    Response.Write("Authentication Tipi : " + Request.ServerVariables["AUTH_TYPE"] + "<br>");
    Response.Write("Mevcut Sistem Kullanıcı : " + HttpContext.Current.User.Identity.Name + "<br>");
    Response.Write("Mevcut ASP.NET kullanıcısı : " + WindowsIdentity.GetCurrent().Name + "<br>");
    Response.Write("Şifre : " + Request.ServerVariables["AUTH_PASSWORD"]);
}

IIS dizin güvenliğinden Anonymous erişimi etkin hale getirirsek, mevcut HTTP bağlamımızın kullanıcısı boş olarak dönecektir. Fakat dikkat ederseniz ASP.NET kullanıcısı yani ASP.NET worker process’inin sahip olduğu kullanıcı benim bilgisayarımın ASPNET kullanıcısı hesabı. (Not : Windows XP ve Windows 2000 işletim sisteminde ASP.NET Worker Process ASPNET kimliği altında çalışır.
Windows Server 2003 işletim sisteminde ASP.NET Worker Process Network Service kimliği altında çalışır.)


Şekil - 4. Anonymous Erişim ve inaktif impersonation

Şimdi Web.config dosyamızdan impersonation’ı aktif hale getirirsek, aşağıdaki ekran ile karşılaşırız. Dikkat ederseniz tek değişen ASP.NET worker process’inin çalıştığı kimlik oldu. ASP.NET worker process’i IIS’ten kimlik bilgisini aldı ve o kullanıcının hakları ile çalışmaya başladı.


Şekil - 5. Anonymous Erişim ve aktif impersonation

Basic Authentication
Basic Authentication en basit ve en güvensiz authentication metodudur. Hemen her browser destekler. Uygulamamız için ayarlar isek, uygulamamızı çağırdığımız zaman standart Windows logon ekranı ile karşılaşırız. Bu ekrandan gireceğimiz kullanıcı adı ve şifre Base64 algoritmasına göre şifrelenir. Base64 algoritması, çözülebilecek (internetten örnek kodları bulabilirsiniz hatta kendiniz kolayca yazabilirsiniz) bir algoritmadır. Dolayısıyla girdiğiniz kullanıcı adı ve şifre internette açık olarak dolaşıyor olacaktır. Ağı dinleyen bir kişi kolayca kullanıcı hesap bilgilerinize erişebilir. Fakat SSL kullanarak basic authentication’ı daha güvenli hale getirebiliriz. SSL yaptığımız çağrıyı yada aldığımız verileri şifrelediği için çalınma riskini kaldırmış olur.


Şekil - 6. Basic Authentication logon ekranı


Şekil - 7. Basic authentication ile logon olduktan sonra uygulamamız.

Şekil - 7’de görüleceği üzere kullanıcının girdiği şifreye erişebiliyoruz. Buda Basic Authentication’ın diğer authentication tiplerine göre ayırıcı özelliklerinden biri.


Digest Authentication
Digest Authentication, Basic Authentication’a göre daha güvenli fakat daha kısıtlı kullanıma sahiptir. Internet Explorer 5.0 ve üstü ile çalışır. Kullanıcı adı ve şifresi networkte taşınmaz, onun yerine bir hash transfer edilir. Dolayısıyla bir network alan adı altındaki tüm kullanıcı şifreleri geri çevrilebilir bir algoritma ile Active Directory’de saklanır.


Integrated Windows Authentication
Integrated Windows Authentication’dada Digest Authentication gibi kullanıcı adı ve şifresi network’te dolaşmaz. İşletim sisteminde oturum açmış olan kullanıcı eğer windows authentication ile korunan web uygulamasına giriş yapmak isterse tekrar giriş ekranı ile karşılaşmaz. Tabi eğer kullanıcının oturum açtığı hesap yeterli izinlere sahip değil ise tekrar giriş ekranı ile kullanıcıdan sisteme giriş yapması istenir.


Şekil - 8. Integrated Windows Authentication
Şekil - 8’de görüldüğü üzere kullanıcının şifresine kodla ulaşamıyoruz. Ayrıca benim uygulamayı çalıştırırkenki Windows hesabım musty olduğundan Uygulamayı çalıştırırken hiçbir logon ekranı ile karşılaşmadım.


Şekil - 9. Integrated Windows Authentication ve impersonation aktif.
Şekil - 9’da da gördüğünüz gibi impersonation aktif edildiği zaman ASP.NET worker process’i IIS’ten authenticate edilen kullanıcı hesabı altında çalışmaya başlıyor.

Sonuç
Web uygulamalarının güvenliği dikkat edilmesi gereken en önemli konulardan biridir. Web sunucu altında verilecek denetimsiz bir izin, hem sizin hem de aynı sunucu üzerindeki diğer uygulamaları etkileyecek sonuçları doğurabilir.
Şimdi bir senaryo üzerinde yukarıda incelediğimiz tüm authentication metodlarının vereceği sonuçları incelemeye çalışalım. Web uygulamamız içerisinden sunucu diski üzerinde bir text dosya yaratıp yazmaya çalışalım. (Not : sunucu diskinin o dizininde gerekli haklar tanımlanmamış olduğunu yani default ayarların olduğunu kabul ediyoruz.)

  • Anounymous erişim aktif ise ASP.NET worker process ASPNET kimliği ile yazmaya çalıştığı için erişim engellendi hatası alırız.
  • Impersonation aktif yapılırsa IUSR_MakinaAdi kimliği ile yazma işlemi gerçekleştirdiğimizden yine erişim engellendi hatası alırız.
  • Şekil - 3’teki anounymous erişim hesabını işletim sisteminin yetkileri yüksek hesaplarından biri ile değiştirirsek ve impersonation’ı aktif hale getirirsek, disk üzerine yazabilmeye başlarız fakat çok tehlikeli bir durum yaratmış oluruz.Çünkü authentication yapılmamış tüm erişimlerin, bu yüksek yetkili hesap ile çalışmasını sağlamış oluruz.
  • Basic, Digest ve Integrated Windows Authentication’da da erişim engellendi hatası alırız. Çünkü halen ASP.NET worker process düşük yetkili ASPNET hesabı ile çalışıyor.
  • Basic, Digest ve Integrated Windows Authentication’da impersonation’ı aktif hale getirirsek uygulamamıza giriş yapan kullanıcının sunucu üzerindeki hakları disk üzerine yazmayı içeriyorsa hata almadan yazarız. Yazma işlemi için yeterli haklara sahip olmayan bir kullanıcı ile uygulamaya giriş yaparsak, bu işlemi gerçekleştirebilmek için daha yüksak haklara sahip bir kullanıcı hesabı ile giriş yapabilmemiz için yeniden giriş ekranı ile karşılaşırız.
Bu makalemde ASP.NET’te güvenlik konusuna giriş yaptık ve IIS authentication ayarlarını incelemeye çalıştık. Bir sonraki makalemde ASP.NET authentication metodlarını inceleyeceğiz.

Makalemde kullandığım uygulamayı indirmek için tıklayın..

Kaynaklar
  • O’Reilly - Programming ASP.NET
  • Wrox - Professional ASP.NET
  • Syngress - Hacking the Code: ASP.NET Web Application Security
Makale:
ASP.NET Güvenlik I - IIS Authentication ASP.NET Mustafa Erhan Ersoy
  • Yazılan Yorumlar
  • Yorum Yaz
ARA
3
2009
Çok teşekürler çok aydınlatıcı bir makale olmuş
NİS
17
2005
Asp.Net güvenlik bana her zaman çok karmaşık görünürdü. Oysaki sevgili Mustafa Erhan Ersoy bu karmaşıklığı bu güzel yazısı ile ortadan kaldırdı. Artık güvenlik konusu benim için kapalı kutu olmaktan çıktı. Bu kadar sade ve başarılı bir anlatımdan sonra anlamasam yazık olurdu. Teşekkürler Mustafa. Ellerine sağlık. Harika bir yazı olmuş.
NİS
16
2005
makale için teşekkür ediyoruz. İyi çalışmalar.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor