Jump to content

Asp.net GÜvenlİk


wmismail

Recommended Posts

.NET ’te güvenlik denilince akla gelen iki ana başlık Authentication ve Autherization’dır. Ø Authentication; kimlerin uygulamaya gireceğini belirler Ø Autherization; giren kişilerin dosyalara veya klasörlere hangi yetkilerle ulaşacağını belirler. Authentication Authentication metotları Windows, forms ve passport’tur. Bu metotlardan birini seçerek sitemizde güvenliğimizi sağlarız. En çok kullanılan iki tanesi Windows ve Forms’dur. Passport yöntemi Microsoft tarafından sağlanılan ücretli bir güvenlik sistemidir. Windows Windows yöntemi daha çok işletim sistemine dayanan bir güvenlik sağlar. Klasörünüzün sahip olduğu Security ayarları üzerinden işlem yapılmaktadır. Eğer dosyanızı okuma izni verdiyseniz ve kullanıcı sayfanıza giriş yaptıysa, bu asamadan sonra giren kişinin kullanıcı adına bakarak bazı öğeleri gizleme sansınızda olabilir. Windows yönteminde de birkaç yöntem söz konusudur. Bunlar; Ø Anonymous Ø Basic Authentication Ø Digest Authentication Ø Integrated Security’dir. Simdi bu yöntemleri inceleyelim. (Aşağıdaki uygulamaları yaparken .NET ’te build ctrl+shift+b yaptıktan sonra yeni bir Explorer açarak giriş yapmanız daha sağlıklı sonuçlar üretecektir.) Integrated Windows Authentication Bu güvenlik sisteminde sisteme logon olan kişiye hiç bir soru sorulmadan kullanıcının hakları geçerli olur. Kullanıcı logon olduktan sonra hangi klasörlere veya dosyaya girme izni verdiysek onları kullanabilir. Bunun için öncelikle IIS’e gidip Directory Security tab’ında ayarlamalar yapılır.

1000000688_image001.jpg

Bunun için Anonymous Access and Authentication control’de edit’e tıklanır. Buraya tıklandıktan sonra Integrated Windows Authentication sadece onaylı kalacak şekilde ayarlama yapılır.

1000000688_image002.jpg

Artık bu işlemden sonra sayfamıza bir label yerleştirip, sayfanın yüklenmesi olayına aşağıdaki kodu yazarsak “Access Denied” diye bir cevap görürüz. Label1.Text = User. Identity. Name Buradan domain’e giriş yapan kişinin kullanıcı adı ve domain’i elde edilmiş olur. Şimdi uygulama klasörüne gidilip webform1.aspx dosyasının security ayarlarından everyone için read hakkını kaldıralım ve tekrar sayfayı çağıralım. Bu sefer dosyamıza erişim yapılamadığını belirten bir mesajla karsılaşmış oluruz. Windows Authentication metodumuz olurken, verilen izinler(security ayarları) ise authorization’dır. Basic Authentication Basic Authentication için; logon olmanız önem taşımamaktadır ve size tekrar logon penceresi görüntüler. Yani logon olan kullanıcının hala orda olup olmadığını test eder diyebiliriz.

1000000688_image003.jpg

Directory security’de Basic Authentication işaretlenir ve uygulamaya girmeye çalışılırsa aşağıdaki pencere karsınıza çıkacaktır. 1000000688_image004.jpgDigest Authentication Digest Authentication sadece o an bağlı olunan domain’in kullanıcılarını ve yetkilerini kullanır. Aynı zamanda password transferi encrypted gerçekleşir. Basic authentication’da olduğu gibi kullanıcı adı ve şifre penceresi gelecektir.

1000000688_image005.jpg

Anonymous Access Anonymous access’te herhangi bir kullanıcı adı veya şifre istenmez. Bağlanan kullanıcıya verilecek haklar browse tuşuna basılarak belirlenir.

1000000688_image006.jpg

Yukarıda olduğu gibi uygulamaya giriş yapan herkes IUSR_JUNIOR hesabıyla giriş yapmış gibi gözükecektir. Dolayısıyla bu kullanıcının sahip olduğu hakları otomatik olarak almış olacaklardır. Simdi yukarıda yapılanları bir örnekte inceleyelim. Bunun için sayfama sekiz adet label yerleştiriyorum ve dördünü sol taraftaki baslıklar için kullanıyorum. Diğer dördünü ise aşağıdaki kodlarla yazdıralım. VB.NET Private Sub Page_Load(ByVal sender As System. Object, ByVal e As System. EventArgs) Handles MyBase. Load

Label1.Text = User. Identity. Name

Label2.Text = User. Identity. IsAuthenticated

Label3.Text = User. Identity. AuthenticationType

Label4.Text = User. IsInRole("Domain/Administrators")

End Sub

C#

Private void Page_Load(object sender, System. EventArgs e)

{

Label1.Text = User. Identity. Name;

Label2.Text = User. Identity. IsAuthenticated;

Label3.Text = User. Identity. AuthenticationType;

Label4.Text = User. IsInRole("Domain/Administrators");

}

Bundan sonra yapacağımız işlemleri IIS’ de yapıyorum. Öncelikle Integrated Security kullanıp diğer ayarların onaylarını kaldırıyorum ve aşağıdaki ekranı elde ediyorum. 1000000688_image007.jpg User Domain/VolkanK IsAuthenticated True Authentication Type NTLM Admin? False Bu ekranda NTLM olarak bahsedilen Integrated Windows Authentication’dır. Simdi IIS’e gidip ayarlarımızı Basic olarak ayarlarsak, bu sefer öncelikle kullanıcı adını ve şifresini doğrulayan bir pencere gelir. Bilgiler girildikten sonra ise aşağıdaki ekran karsımıza çıkar. 1000000688_image007.jpg User Domain/VolkanK IsAuthenticated True Authentication Type Basic Admin? False Buraya kadar olan çalınmalarımızda IIS’ ten ve ACL(Access Control List-Kullanıcı Hakları)’den yararlanarak gerçekleştirdik. Bu aşamadan sonra işin içine web.config dosyasını katacağız. Yalnız web.config dosyasına gelmeden bir hatırlatma yapalım. Web.config dosyasında olmayan bir ifade eğer varsa machine.config’den ilgili ayar alınır. 1000000688_image008.jpg Config dosyalarında baskınlık sırası aşağıdaki şekildedir. Ø Uygulama klasöründeki web.config Ø Root klasördeki web.config Ø Machine.config dosyası seklindedir. Şimdi yukarıdaki işlemleri web.config dosyasını kullanarak yapalım. Ben Volkank kullanıcısını kullanarak web sitesine giremezken OkanK kullanıcısının girmesini sağlamak istiyorsam web.config dosyasına gidip aşağıdaki satırları yazmam gerekir. <authorization> <allow users= "Domain\OkanK" /> </authorization> Bunları yazdığımda VolkanK kullanıcısı uygulamaya hala girebiliyor durumdadır. Bunun nedeni machine.config dosyasında tüm kullanıcılara uygulamanın açık olmasıdır. Web.config dosyamda diğer kullanıcılar için herhangi bir ayarlama gerçekleştirmediğimden dolayı ayarlarını machine.config dosyasından almaktadır. O zaman iki alternatifim vardır. Bunlardan birincisi; 1) machine.config’de her kullanıcıya izin veren satırı kaldırmak yada web.config dosyasına VolkanK kullanıcısı için bir deny satırı eklemek. 2) Benim sık sık kullandığım diğer yöntemse web.config dosyasına aşağıdaki kodu yazıyorum. <authorization> <allow users= "Domain\OkanK" /> <deny users="Domain\VolkanK" /> </authorization> Artık sayfaya girmeye çalıştığımda Integrated seçmeme rağmen kullanıcı adı ve parolası ekranı gelecek ve başka bir kullanıcı adı ve şifresi girmem istenecektir(Bu da OkanK olmalıdır.) Böylelikle aşağıdaki sekil doğrulanmış olacaktır. 1000000688_image009.gifImpersonate Impersonate işlemi uygulamaya giren kullanıcın farklı bir kullanıcı adını kullanarak sistem kaynaklarına ya da dosyalara ulaşmasını sağlayan bir özelliktir. Bu özellik işletim sistemlerindeki runas komutuna benzemektedir. Yani siz OkanK kullanıcısıyla uygulamaya girip VolkanK yetkilerini kullanmak isterseniz bu özelliği açmak zorundasınız. Default olarak False gelmektedir. Impersonate özelliğini True yapmak için web.config dosyasına gidip aşağıdaki satırları eklememiz gerekir. <authorization> <allow users= "Domain\OkanK" /> <! -- Allow All Users -- > <! -- <allow users=”[comma seperated list of users]” roles=”[comma seperated list of roles]” /> <deny users=”[comma seperated list of users]” roles=”[comma seperated list of roles]” /> -- > </authorization> <identity impersonate=”True” username=”Domain/VolkanK” password=”123” /> O an hangi yetkileri kullandığınızı öğrenmek isterseniz, öncelikle ise System.Security.Principal namespace’ini import etmekle başlayalım. Daha sonra yeni satırlarımızı eklememiz gerekir. VB.NET Private Sub Page_Load(ByVal sender As System. Object, ByVal e As System. EventArgs) Handles MyBase. Load

Label1.Text = User. Identity. Name

Label2.Text = User. Identity. IsAuthenticated

Label3.Text = User. Identity. AuthenticationType

Label4.Text = User. IsInRole("Domain/Administrators")

Dim Principal as New WindowsPrincipal(WindowsIdentity.GetCurrent)

Label9.Text =Principal.Identity.name

End Sub

C#

Private void Page_Load(object sender, System. EventArgs e)

{

Label1.Text = User. Identity. Name;

Label2.Text = User. Identity. IsAuthenticated;

Label3.Text = User. Identity. AuthenticationType;

Label4.Text = User. IsInRole("Domain/Administrators");

WindowsPrincipal Principal=New WindowsPrincipal(WindowsIdentity.GetCurrent);

Label9.Text =Principal.Identity.name;

}

Bu satırları ekleyip uygulamamızı çalıştırdıktan sonra OkanK ile giriş yapıyorum ve aşağıdaki görüntü karsımıza çıkıyor. 1000000688_image010.jpg User Domain/OkanK IsAuthenticated True Authentication Type Basic Admin? False Impersonate edilen Domain/VolkanK Forms Form authentication’da birkaç parametrenin bilinmesi gerekmektedir. Hangi klasörlerin koruma altına alınacağını, login sayfasının belirtilmesi, cookie kullanılıp kullanılmayacağı ve yanlış bilgilerin girilmesi sonucunda hangi sayfaya yönlendirileceği gibi parametrelerin web.config’de belirtilmesi gerekmektedir. <authentication mode=”Forms”> <Forms name=”.ASPXUSERDEMO” loginUrl=”WebForm2.aspx” protection=”All” Timeout=”60”> <Credentials passwordFormat=”Clear”> <user name=”VolkanK” password=”123” /> </Credentials> </authentication> <authorization> <deny users="?" /> </authorization> Web.config’de bu ayarlama yapıldıktan sonra webform3.aspx sayfasına giris yapmaya çalısalım. Bu durumda bizi durdurup webform2.aspx sayfasına yönlendirecek ve adres çubuğundaki görüntü aşağıdaki gibi olacaktır. 1000000688_image011.jpg Artık sıra düğmemiz ile ilgili olayın yazılmasına sıra geldi. Bunun için aşağıdaki kodları yazıyoruz. 1000000688_image012.jpg Formun hemen yanına bir düğmeyi de kullanıcının ileride cookie silmesi için kullanıyorum. Bununla ilgili kodlarda aşağıdaki gibi olacaktır. VB.NET Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

giris()

End Sub

Sub Giris()

If FormsAuthentication.Authenticate(TextBox1.Text, TextBox2.Text) Then

FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, True)

Else

Response.Write("Yanlış kullanıcı adı veya şifre")

End If

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

FormsAuthentication.SignOut()

End Sub C# Private void Button1_Click(object sender, System.EventArgs e) { giris(); } void Giris() { if (FormsAuthentication.Authenticate(TextBox1.Text, TextBox2.Text)) { FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, True); } else { Response.Write("Yanlış kullanıcı adı veya şifre"); } } Private void Button2_Click(object sender, System.EventArgs e) { FormsAuthentication.SignOut(); } FormsAuthentication class’ının altındaki metotlar ve kullanım amaçları aşağıdadır.

Authenticate(Kullanıcı Adı, Şifre) Kullanıcı adı ve şifre alınarak web.config dosyasında karsılaştırma işlemi yapılır. Böylelikle kullanıcıya istediği sayfaya giriş izni verilip verilmeyeceğine karar verilir. RedirectFromLoginPage(Kullanıcı adı, Cookie depolanması) Kullanıcı gerekli izni aldıktan sonra istemiş olduğu sayfaya gönderilir. Örneğimizde bu sayfa webform3.aspx dosyasıdır. Bu dosyaya giderken cookie’nin tutulup tutulmayacağını cookie depolanması kısmında söyleyeceğimiz True ya da False boolean değeri ile belirleriz. Burayı True olarak belirlememiz, browser’dan çıkıp tekrar girdiğimizde login sayfasına gitmemize neden olacaktır. Eğer False olarak belirtilirse kullanıcı signout olana kadar, browserdan çıkıp girmesi sorun olmayacaktır ve login sayfasına uğramadan gezmesini sağlayacaktır. SignOut() Signout metodu bilgisayarımızdaki cookie’nin silinmesini sağlayacaktır. Bunların yanında az sayıda kullanılmakla beraber aşağıdaki metotlarda kullanılabilir. GetRedirectUrl(Kullanıcı adı, Cookie depolanması) Kullanıcının gitmek istediği sayfa bu metot kullanılarak elde edilebilir.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...