IRCForumlarý - IRC ve mIRC Kullanýcýlarýnýn Buluþma Noktasý
  odeaweb

>
+
Etiketlenen Kullanýcýlar

 
 
LinkBack Seçenekler Stil
Prev önceki Mesaj   sonraki Mesaj Next
Alt 11 Nisan 2008, 20:13   #1
Çevrimdýþý
Kullanýcýlarýn profil bilgileri misafirlere kapatýlmýþtýr.
IF Ticaret Sayýsý: (0)
IF Ticaret Yüzdesi:(%)
ASP Security




Internet uygulamalarý geliþtirilirken dikkat edilmesi gereken en önemli unsurlardan birisi güvenliktir. Kullanýcýlarýn yetki seviyeleri, yani rollerine göre gerçekleþtirebileceði iþlemler denetlenebilmeli, yetkisi olmayan kullanýcýlar ise engelenebilmelidir.

ASP.NET teknolojisinde güvenlik iki kýsýmdan oluþmaktadýr, bunlar gerçekliðin doðrulanmasý (“authentication”) ve yetki kontroludur “(authorization)”. Gerçekliðin doðrulanmasý iþlemi, kullanýcý adý ve þifre bilgilerinin doðru olup olmadýðýnýn ilgili kullanýcý bilgilerini saklayan yapýnýn denetlenerek bulunmasýdýr. Gerçekliðin doðrulanmasý iþlemi baþarý ile sonuçlanýrsa, yetki kontrol iþlemi aracýlýðý ile kullanýcýnýn ilgili kaynaklara eriþip eriþemeyeceðine karar verilmektedir. ASP.NET kod içerisinde de kullanýcý kimliðini kullanarak yetkiye göre davranýþ sergileyebilmektedir. Buna kiþileþtirme (“impersonation”) denilmektedir.

Özetlemek gerekirse güvenlik 3. adým seçimlik olmak üzere üç adýmdan oluþmaktadýr;

1) Kullanýcý Gerçekliðinin Doðrulanmasý

2) Kullanýcý Yetkilerinin Kontrolü

3) Kullanýcý için kiþileþtirilme (“User Impersonation”), uygulama istekte bulunan kullanýcýnýn tipine göre kod çalýþtýrmaktadýr.

ASP.NET teknolojisinde gerçekliðin doðrulanmasý iþlemi üç farklý yapý içerisinde saðlanabilmektedir. Bu yapýlar þunlardýr;

a) “Form-Based Authentication”

b) “Windows Authentication”

c) “Passport Authentication”

Bu makalede “Form-Based Authentication” hakkýnda detaylý bilgi verilecektir. Bunun sebebi yukarýdaki üç yaklaþým arasýndan en esnek olaný olmasýndan dolayýdýr. Bu esnekliði saðlayan kendimize ait HTML formlarý oluþturabilmemiz ve iþlemi kontrol edebilmemizdir.

“Form-Based Authentication” yapýsýnda gerçekliðin doðrulanmasý iþlemi için “cookie” ler kullanýlmaktadýr. Gerçekliðin doðrulanmasý iþlemini gerektiren isteklerde bulunulduðunda (Örneðin sanal alýþveriþ sitesinde alýnacak ürün seçildikten sonra ödeme iþlemini sadece sisteme kayýtlý kullanýcýlarýn yapmasý) kullanýcý “HTML Login” formuna yönlendirilmektedir. Kullanýcý adý ve þifre bilgileri girildikten sonra bu bilgilerin doðru olup olmadýðý sistem tarafýndan ilgili kaynaklarýn (kullanýcý bilgilerinin saklandýðý veritabaný veya XML dosya veya web.config dosyasý...) taranmasý aracýlýðý ile tespit edilmektedir. Bilgilerin doðru olmasý durumunda kullanýcý kimliðini belirten bir cookie yaratýlmaktadýr. Daha sonraki istekler için bu cookie kontrol edilmektedir.

Gerçekliðin doðrulanmasý iþleminin aktif hale getirilmesi için web.config dosyasý içerisinde, <security> bölümü altýndaki <authentication> öðesi biçimlendirilmelidir.

<configuration>

<system.web>

<security>

<authentication mode="Forms">

</authentication>

</security>

</system.web>

</configuration>



Gerçekliðin doðrulanmasý iþleminin ardýndan kullanýcýnýn eriþim kontrolleri yine web.config dosyasý kullanýlarak denetlenebilmektedir. ASP.NET kullanýcý tipine göre (“role-based security”) güvenliði de desteklemektedir. Bu konu hakkýnda detaylý bilgi verilecektir.

“Form-Based Authentication”
Bu kýsýmda “Form-based authentication” örnekler ile açýklanacaktýr. Ýlk örnekte kullanýcý adý ve þifreler web.config dosyasýnda saklanacak, böylelikle cookie tabanlý gerçekliðin doðrulanmasý iþlemine kolay bir bakýþ açýsý saðlanacak, ikinci örnekte ise fonksiyonelliði arttýrmak amacý ile kullanýcý adý ve þifreler bir veritabaný tablosuna taþýnacaktýr.

1.Örnek

Bu örnek 3 ayrý dosyadan oluþmaktadýr. Bunlar web.config, default.aspx ve login.aspx dosyalarýdýr.

web.config
-----------

<configuration>

<system.web>

<authentication mode="Forms">

<forms name=".ASPXUSERDEMO" loginUrl="login.aspx"

protection="All" timeout="60">

<credentials passwordFormat="Clear" >

<user name="hersh" password="bhasin"/>

<user name="joe" password="smith"/>

<user name="test" password="user"/>

</credentials>

</forms>

</authentication>

<authorization>

<deny users="?" />

</authorization>

<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />

</system.web>

</configuration>




Yukarýdaki örnekte görüldüðü gibi gerçekliðin doðrulanmasý (“authentication”) ve yetki kontrolü (“authorization”) ayrý öðeler içerisinde gösterilmiþtir. Kullanýcý adlarý ve þifreler web.config dosyasý içerisinde tanýmlanmýþ, ve cookie içerisinde tanýmlý kullanýcý adý bulunmamasý durumunda “login.aspx” dosyasýna yönlendirilme <forms> “tag” i içerisinde belirtilmiþtir.

<authorization> bölümü içerisinde <deny> ve <allow> olmak üzere iki bölüm yaratýlabilmektedir.

<deny users= “?”/> satýrý ile cookie (bu cookie ileride gösterilecek kod örneklerinde daha iyi bir þekilde anlaþýlabilecek olan “authentication” iþleminin baþarýlý geçmesi durumunda bir deðer taþýyan cookie’dir) içerisinde bir deðer bulunmamasý durumunda bu kullanýcýyý reddet emri sisteme verilmektedir.

Login.aspx
<%@ Import Namespace="System.Web.Security " %>

<html>

<script language="VB" runat=server>

public void Login_Click(object Src,EventArgs e)
{
if(FormsAuthentication.Authenticate(UserName.Value ,UserPass.Value)
{
FormsAuthentication.SetAuthCookie(UserName.Value,f alse);
Response.Redirect("default.aspx");
}
else
{
Msg.Text = "Yanlýþ kullanýcý adý veya þifre: Yeniden deneyiniz."
}
}

</script>

<bOdy>

<form runat=server>
<h3><font face="Verdana">Login Page</font></h3>
<table>
<tr>
<td>User Name:</td>
<td><input id="UserName" type="text" runat=server/></td>
<td><asp:RequiredFieldValidator ControlToValidate="UserName" Display="Static" ErrorMessage="*" runat=server/></td>
</tr>
<tr>
<td>Password:</td>
<td><input id="UserPass" type=password runat=server/></td>
<td><asp:RequiredFieldValidator ControlToValidate="UserPass" Display="Static" ErrorMessage="*" runat=server/></td>
</tr>
</table>
<asp:button text="Login" OnClick="Login_Click" runat=server/>
<asp:Label id="Msg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat=server />
</form>
</bOdy>
</html>



Yukarýdaki kodda kritik olarak incelenmesi gereken kýsým aþaðýdadýr;

public void Login_Click(object Src,EventArgs e)
{
if(FormsAuthentication.Authenticate(UserName.Value ,UserPass.Value)
{
FormsAuthentication.SetAuthCookie(UserName.Value,f alse);
Response.Redirect("default.aspx");
}
else
{
Msg.Text = "Yanlýþ kullanýcý adý veya þifre: Yeniden deneyiniz."
}
}

Bu metodta kullanýlan “FormsAuthentication” sýnýfý System.Security içerisinde bulunan ve “forms-based authentication” iþlemlerinde kullanýlan sýnýftýr. “Authenticate” metodu ile girilen kullanýcý adý ve þifrenin web.config dosyasýnda tanýmlý olan þifreler ile eþleþip eþleþmediðine bakýlmaktadýr. Eðer eþleþme doðru ise ilgili cookie deðerine kullanýcý adý atanmakta ve sayfa yönlendirilmektedir. Eþleþmenin yanlýþ olmasý durumunda kullanýcý uyarýlmaktadýr.

Buraya kadar olan kýsmý bir örnek ile özetlemek gerekirse;

1) <![endif]> Gerçekliðin doðrulanmasý iþlemine ihtiyaç duyulduðu zaman hangi sayfaya gidilmesi gerektiði tanýmlanýr;

<forms name=".ASPXUSERDEMO" loginUrl="login.aspx" protection="All" timeout="60">

2) <![endif]> web.config dosyasýnda kullanýcý adlarý ve þifreleri tanýmlanýr

<credentials passwordFormat="Clear" >

<user name="hersh" password="bhasin"/>

<user name="joe" password="smith"/>

<user name="test" password="user"/>

</credentials>

3) <![endif]> Ýlgili yetki tanýmlarý yapýlýr

<authorization>

<deny users="?" />

</authorization>

4) <![endif]> Gerçekliðin doðrulanmasý iþleminin baþarýlý olup olmadýðýný kontrol eden kod eklenir. (Login_Click metodu)




2.Örnek

Bu örnekte daha önceden de belirtildiði gibi kullanýcý adý ve þifreler veritabanýndaki bir tablodan alýnacaktýr.

Kod olarak “MSPetshop” uygulamasýndan yararlanýlmaktadýr.

Web.config dosya yapýsý


......
......

<authentication mode="Forms">

<forms name="PetShopAuth" loginUrl="SignIn.aspx" protection="None" path="/" />

</authentication>

</system.web>

<!-- set secure paths -->

<location path="EditAccount.aspx">

<system.web>

<authorization>

<deny users="?" />

</authorization>

</system.web>

</location>

<location path="OrderBilling.aspx">

<system.web>

<authorization>

<deny users="?" />

</authorization>

</system.web>

</location>

</configuration>



Yukarýdaki örnekte de görüldüðü gibi, kullanýcý adý ve þifre tanýmý web.config dosyasýnda yapýlmamýþtýr. Ýlk örnekten bir diðer farký ise gerçekliðin doðrulanmasý iþleminin tüm sayfalar yerine sadece iki sayfa için (“EditAccount.aspx” ve “OrderBilling.aspx”) tanýmlanmýþ olmasýdýr. Bu sayfalara eriþmek isteyen kullanýcýlar eðer sisteme kayýtlanmadýlar ise “Signýn.aspx” dosyasýna yönlendirileceklerdir.

SignIn.aspx.cs Dosyasý
.................................

private void btnSubmit_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{

if (Page.IsValid == true)
{
Customer customer = new Customer();
string customerID = customer.Login(txtUsername.Text, txtPassword.Text);

if (customerID != null)
{
Response.Cookies["CustomerID"].Value = customerID; FormsAuthentication.SetAuthCookie(customerID, false);

Response.Redirect("VerifySignIn.aspx");
}
else
{
lblErrorMessage.Visible = true;
}
}
}



Yukarýdaki kod örneði SignIn.aspx sayfasýndaki kullanýcý adý ve þifre bilgileri girildikten sonra çalýþan kodu göstermektedir. “Customer.login” çaðrýmý ile girilen deðerlerin veritabanýnda olup olmadýðýna bakýlmakta, eðer var ise “customerID” deðiþken deðeri “null” deðerinden farklý gelmekte, böylelikle gerçekliðin doðrulanmasý iþleminin tamamlanabilmesi için gerekli olan kod (“FormsAuthentication.SetAuthCookie(customerID , false);”) satýrýnýn bulunduðu “if bloðuna girilmektedir.

Yazar; BSerkan Üstündað

__________________
Geçme namert köprüsünden alýrsa sel alsýn seni. Yatma çakal gölgesinde yerse aslan yesin seni!
 
Alýntý ile Cevapla

 

Etiketler
security, asp


Konuyu Toplam 1 Üye okuyor. (0 Kayýtlý üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajýnýzý Deðiþtirme Yetkiniz Yok

BB code is Açýk
Smileler Açýk
[IMG] Kodlarý Açýk
HTML-Kodu Kapalý
Trackbacks are Kapalý
Pingbacks are Açýk
Refbacks are Açýk