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: authenticate authentication bilgileri dikkat dizine herhangi kullanarak kullanici kullanicinin parametre passport sayfaya sisteme web.config yonetici 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 : 9.6.2005
Okunma Sayısı : 51099
Yorum Sayısı : 6     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 20.4.2024
Turhal Temizer
Mac OS/X Removing CUDA 20.4.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 20.4.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 20.4.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 II - Form Tabanlı Güvenlik
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
ASP.NET"te güvenlik konusunu ele aldığımız makale dizimize devam ediyoruz. Dizinin ilk bölümünde IIS güvenlik ayarlarından bahsettik. ASP.NET Güvenlik - I makalemi okumamış olan arkadaşlara tavsiyem öncelikle onu okuyup daha sonra bu makale ile devam etmeleridir.

Dizimizin ikinci makalesinde ASP.NET sınırları içerisinde güvenliği incelemeye çalışacağız. Ve güzel bir örnek üzerinde anlattıklarımızı uygulayacağız.

<authentication mode="Windows | Forms | Passport | None"/> 
ASP.NET uygulamalarımızın işleyiş ayarlarını barındıran web.config dosyasında bildiğiniz üzere authentication tagi var. Bu tag ile authentication tipimizi "Windows", "Forms", "Password" yada "None" olarak belirleyebiliyoruz. Windows authentication"ı ASP.NET Güvenlik - I makalemde incelemiştim.
Passport authentication, Microsoft"un sağlamış olduğu merkezileştirilmiş, ücretli bir servistir. Bu servisi Microsoft"tan satın aldıktan sonra Passport SDK"yı yükleyerek Passport authentication"ı kullanabilirsiniz. Örneğin Hotmail gibi Microsoft çatısı altındaki siteler Passport authentication"ı kullanmaktadır.

Forms Authentication"a gelirsek - bu makalede form tabanlı authentication"dan bahsediyor olacağım - uygulamada sağlanan bir giriş formu sayesinde kullanıcının kimlik bilgilerini (credentials) toplayıp bu bilgileri veritabanı, XML, web.config yada Active Directory"deki kullanıcı bilgileri ile karşılaştırma işlemleri bütünüdür.

Uygulamamıza geçmeden önce FormsAuthentication sınıfından bahsetmek istiyorum. FormsAuthentication sınıfı, authentication biletleri hazırlamaya ve güncellemeye yarayan statik metodlar sunar.

FormsAuthentication sıkça kullanılan metodları :

  • Authenticate : Parametre olarak geçilen kullanıcı ismi ve şifresini mevcut kullanıcı bilgileri içerisinde kontrol eder.
  • HashPasswordForStoringInConfigFile : Parametre olarak geçilen şifreyi seçilen algoritmaya göre şifreler.
  • RedirectFromLoginPage : Login sayfasında kullanılmak üzere tasarlanmış olam bu metod, kullanıcının istemde bulunduğu sayfaya yönlenmesini sağlar.
  • SignOut : Sisteme giriş yapmış kullanıcının bilgileri bir cookie"de tutulur. Bu cookie"yi zaman aşımına uğratıp kullanıcının sistemden güvenli çıkış yapmasını sağlar.
Uygulamamız aşağıdaki resimden anlaşılacağı üzere iki mantıksal bölüme ayrılmış durumda. Uygulamaya iki tip ziyaretçi girebiliyor. Birinci tip ziyaretçi, kullanıcı dizinindeki sayfaları ziyaret edebiliyor. Bu dizin içerisindeki içeriği görebilmek için herhangi bir authentication gerekmiyor.
İkinci tip ziyaretçi ise belli haklara sahip olacak, site yöneticisi kullanıcısı. Bu kullanıcı hem kullanici hemde yonetici dizinlerine girebilir. yonetici dizinine girebilmesi için authenticate olması gerekir. Sisteme giriş yapabilmesi için giris.aspx sayfasını kullanır.


Şekil - 1. Uygulamanın solution explorer"dan görünümü.
Şimdi tüm bu anlattığımız authentication işlemlerini kolaylıkla ve ileriye dönük olarak en az efor ile nasıl hazırlayabiliriz açıklamaya çalışalım. bu iki dizine ekleyeceğimiz her sayfa için ek olarak bir de güvenlik özelliği eklemek ile uğraşmamalıyız. Bu sıkça güncellenen siteler için çok önemli bir özelliktir.
Aşağıdaki kod parçasında bu proje için hazırladığım web.config dosyasından bir parça görüyorsunuz. Bu kod parçasında uygulamamızın iki dizinini tanımlıyoruz ve bu dizinler için authorization kriterlerini belirliyoruz.

location tagini kullanarak uygulamamız içerisindeki herhangi bir dizine ait ayarları bu tag içerisinde belirleyebiliriz. Yada diğer bir yöntem, bu klasör içerisine de bir web.config dosyası ekleriz. (NOT : location taginin configuration tagi içerisinde olduğuna ve kendine özel bir system.web tagi içerdiğine dikkat edin.)
Authorization tagi içerisindeki allow va deny taglarına dikkat edelim.
allow tagi izin verilecek kullanıcı veya rolleri belirlemeye yarar. users veya roles attribute"lerini kullanabiliriz allow tagi içerisinde. Bu attributelere istersek rol veya kullanıcı adı, istersek *, ? gibi özel anlamı olan joker karakterler verebiliriz.
* Authenticate olsun olmasın tüm ziyaretçileri kapsar.
? Authenticate olmamış olan kullanıcıları kapsar.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
  <system.web>

    <authentication mode="Forms">
        <forms loginUrl="giris.aspx" protection="All" timeout="10">
                <credentials passwordFormat="MD5">
                    <user name="yonetici" password="420bc0eb0c541056d0f6b973d691d663"/>
                </credentials>
            </forms>
    </authentication> 
    
    <!-- ŞYFRE : csharpnedir -->

    <authorization>
        <allow users="*" />
    </authorization>
   
 </system.web>
 
  <location path="kullanici">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
 </location>
 
  <location path="yonetici">
    <system.web>    
        <authorization>
            <deny users="?" />
            <allow users="yonetici" />
        </authorization>
    </system.web>
 </location>

</configuration>
Dikkat edeceğiniz üzere yonetici dizininde autheticate olmamış kullanıcıları reddediyoruz. Sonra sadece yonetici kullanıcısına giriş izni veriyoruz.

Authentication uygulamamızın tamamı için geçerli olan en üstteki Authentication tagi içerisindeki forms tagine dikkate ederseniz login sayfasının yeri belirtilmiştir. Yani uygulama içerisindeki authentication gerektiren bir dizine giriş isteği geldiğinde eğer isteği yapan authenticate olmamış ise bu login sayfasına yönlendirilecek.

form tagi içerisindeki credentials tagine dikkat edelim şimdi de, passwordFormat olarak "Clear", "SHA1", "MD5" girebiliyoruz.
"Clear" : Authentication mekanizmasına, şifremizi herhangi bir şifreleme yapmadan açık açık yazdığımızı belirtmiş oluyoruz. Kullanmanızı kasinlikle tavsiye etmiyorum.
"SHA1", "MD5" : Encryption algoritmalarını kullanarak şifrenizi şifrelediğinizi belirtmiş oluyorsunuz.
Gördüğünüz gibi benim belirlediğim yonetici kullanıcısı şifresi MD5 ile şifrelenmiş durumda. (Uygulamalarında kullanacağınız şifreleri ek olarak eklediğim basit metin şifreleme uygulamasını kullanarak encrypt edebilirsiniz yada FormsAuthentication sınıfının HashPasswordForStoringInConfigFile metodunu kullanabilirsiniz.)


Şekil - 2. Basit metin şifreleme uygulaması. Web.config dosyamızı yukarıdaki gibi ayarladığımız zaman artık yonetici klasörü içerisine istediğimiz kadar sayfa ekleyebiliriz. Bu sayfaların hiçbirinin yonetici kullanıcısı dışında bir ziyaretçi tarafından görülemeyeceğine emin olabilirsiniz.

Şimdi giris.aspx sayfamızı incelemeye çalışalım :


Şekil - 3. giris.aspx sayfası (login sayfası).

if (FormsAuthentication.Authenticate(txtUserName.Text, txtPassword.Text))
                FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, true);
Gördüğünüz gibi authentication işlemini gerçekleştirebilmemiz için FormsAuthentication sınıfının Authenticate methodunu kullanmamız yeterli. Authenticate methodu çağrıldığında parametre olarak geçilen kullanıcı bilgileri web.configdeki mevcut kayıtlar ile karşılaştırılıyor. Bu kayıtlardan birinin tutması halinde istekte bulunan sayfaya yönlendiriyoruz kullanıcıyı. İşte bu durumda authorization mekanizması çalışıyor. Ziyaretçinin görmek istediği sayfayı görmeye hakkı olup olmadığı kontrol ediliyor. Eğer var ise ziyaretçi sayfayı göüyor. Yok ise ziyaretçi tekrar giriş sayfasına yönlendiriliyor ve bu sayfaya girebilecek bir kullanıcı ile sisteme girmesi isteniyor.

Sonuç Gördüğünüz gibi birkaç ayar yaptıktan sonra kullanıcı yönetimini sağlamak çok basit. Fakat bu gösterdiğim örnek elbetteki çok fazla üyesi olan uygulamalar için geçerli olamayacaktır. Bu durumda kullanıcı bilgileri XML yada varitabanıonda tutulur ve authentication işlemi için ekstra bir efor sarfederiz. Ama birkez sistem hazırlandığı zaman tekrar tekrar her bir sayfaya uygulamak zorunda kalmazsınız.

Kaynaklar
  • OReilly - Programming ASP.NET
  • MSDN
  • 4guysfromrolla.com
Basit encryption uygulaması
Makalede anlatılan uygulama
Makale:
ASP.NET Güvenlik II - Form Tabanlı Güvenlik ASP.NET Mustafa Erhan Ersoy
  • Yazılan Yorumlar
  • Yorum Yaz
ŞUB
9
2010
bu yorum kısmını neden yapıyorsunuz cevap vermicekseniz???
OCA
4
2010
hocam kafama takılan bir şey var, if (FormsAuthentication.Authenticate(txtUserName.Text, txtPassword.Text)) FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, true); burada kod blogunun altına birde response.redirect(yonetici.aspx); eklememiz gerekmiyor mu ya da, web config de belirtmemiz ??? çünkü bunu koymadan keisnlikle sayfa yönlenmiyor yonetici saifesine ? ya da web.config de atladığımız bir şey mi var ???
TEM
16
2008
Hocam Merhabalar Ben sizin makalede işlediğiniz şekilde bir sitenin yönetici bölümününe authorization yoluyla güvenli giriş işlemi uygulamaya çalıştım. Ancak bende Linq tür veya ad alanı adı System ad alanında yok gibi bir hata verdi. Sonra ben sizin örneğinizi doğrudan sitemin içine eklemeye çalıştım yine aynı hatayı aldım. Oysa sizin projeyi indirip incelediğim de sizin projenizde de Using System. Linq alan adı yoktu ama sizinkin de sorun da yoktu. Ben kendi projeme bu alan adını eklediğimde de sorun düzelmedi. Ben nerede hata yapıyorum çözemedim bir türlü. Bana yardımcı olursanız çok sevinirim. Şimdiden teşekkür ederim.
TEM
16
2008
Hocam Merhabalar Ben sizin makalede işlediğiniz şekilde bir sitenin yönetici bölümününe authorization yoluyla güvenli giriş işlemi uygulamaya çalıştım. Ancak bende Linq tür veya ad alanı adı System ad alanında yok gibi bir hata verdi. Sonra ben sizin örneğinizi doğrudan sitemin içine eklemeye çalıştım yine aynı hatayı aldım. Oysa sizin projeyi indirip incelediğim de sizin projenizde de Using System. Linq alan adı yoktu ama sizinkin de sorun da yoktu. Ben kendi projeme bu alan adını eklediğimde de sorun düzelmedi. Ben nerede hata yapıyorum çözemedim bir türlü. Bana yardımcı olursanız çok sevinirim. Şimdiden teşekkür ederim.
NİS
30
2006
Elinize sağlık, çok işime yaradı.
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