Kurs: Advanced Web Application Technologies
Modul: Sigurnost ASP.NET veb aplikacija
Autor: Marko Stojićević
Naziv jedinice: Sigurnost veb aplikacija
Materijali vezani uz ovu lekciju:
-
Test sigurnost veb aplikacija -
Sigurnost veb aplikacija (PDF dokument)
Autentifikacija i autorizacija
Autentifikacija je proces dobijanja identifikacionih podataka od korisnika kao što su korisničko ime i šifra. ASP.NET obezbeđuje 3 autentifikaciona mehanizma: windows autentifikacija, forms autentifikacija i passport autentifikacija. Pošto je korisnik autentifikovan u procesu autorizacije se definiše kojim resursima i sa kakvim pravima korisnik može da pristupi.
ASP.NET autentifikacioni metodi
Windows-bazirana autentifikacija se oslanja na Windows operativni sistem i IIS. Korisnik zahteva web stranu i taj zahtev prolazi kroz IIS. Pošto se identifikacioni podaci verifikuju od strane IIS-a web strana se šalje korisniku. Windows autentifikacija se koristi u intranet okruženjima. Kod autentifikacije bazirana na formi neautorizovani zahtevi se preusmervaju na HTML formu ma kojoj se prikazuje poruka korisniku. Na formi za logovanje korisnik unosi identifikacione podatke i sabmituje HTML formu a sistem šalje autentifikacioni cookie korisniku. Microsoft Passport autentifikacija je centralizovani autentifikacioni servis. Radi na principu web servisa.
<system.web>
<authentication mode="Windows" />
</system.web>
Windows autentifikacija
IIS upoređuje informacije koje je uneo korisnik sa windows korisničkim nalozima. Svi korisnici web aplikacije kod ove autentifikacije moraju imati windows nalog. Obezbeđivanje web aplikacije korišćenjem windows autentifikacije sastoji se od 4 koraka: konfigurisanje IIS-a, podešavanje autentifikacije u Web.config fajlu, podešavanje autorizacije u Web.config fajlu i slanje identifikacionih podataka od strane korisnika. Ovde je prikazan deo web.config fajla gde je setovana windows autentifikacija web sajta.
<system.web>
<authentication mode="Windows" />
</system.web>
Autentifikacija bazirana na formi
Omogućava aplikaciji da obezbedi sopstveni korisnički interfejs za logovanje. Autentifikacija bazirana na formi je pogodna je za internet aplikacije. Mora se obezbediti strana za logovanje.
Redirekcija neautentifikovanih korisnika vrši se na stranu za logovanje. Definiše se ime autentifikacionog cookie-ja, strana za logovanje i vreme života cookie-a. Može se koristiti permanentni cookie za koga se definiše vreme života kao i privremeni autorizacioni cookie koji živi u u toku jedne sesije korisnika. Sledi prikaz dela web.config fajla sa definisanom Forms autentifikacijom. Strana za logovanje je login.aspx a cooki ima name atribut ASPXUSERDEMO.
<authentication mode="Forms">
<forms name=".ASPXUSERDEMO" loginUrl="login.aspx" protection="All" timeout="60" />
</authentication>
Definisanje korisnika unutar koda
Za slučaj malog broja korisnika moguće im je dodeliti fiksno korisničko ime i šifru u kodu. Pozivom metode FormsAuthentication.RedirectFromLoginPage se autentifikovani korisnik šalje na zaštićenu stranu koju je zahtevao ili na podrazumevanu stranu ukoliko je prvo pristupio strani za logovanje. Klikom na dugme Button1 generiše se događaj Button1_Click vrši se odjava autentifikovanog korisnika sa web sajta odnosno brisanje autentifikacionog cookie-a.
if ((TextUserName.Text == “korisnickoIme") && (TextPass.Text == "password"))
{
FormsAuthentication.RedirectFromLoginPage(UserEmail.Value,
PersistCookie.Checked);
}
else
{
Poruka.Text = “Pogresno korisnicko ime ili sifra";
}
private void Button1_Click(object sender, System.EventArgs e)
{
// unisti korisnikov cookie
FormsAuthentication.SignOut();
// vrati ga na pocetnu stranu
Response.Clear();
Response.Redirect(“login.aspx");
}
Definisanje korisnika u web.config fajlu
Prikazaćemo način dodavanja korisnika web aplikacije korišćenjem web.config fajla. Kreiran je korisnik čije je korisničko ime link i šifra link, kao i korisnik čije je korisničko ime test i sifra test.Ukoliko želimo da na web sajtu postoje i nezaštićene strane tj. strane kojima mogu pristupati neautentifikovani korisnici onda se za svaku od tih strana definiše location tag koji ima svoju autorizacionu sekciju.
<authentication mode="Forms">
<forms name=".ASPXUSERDEMO" loginUrl="login.aspx"
protection="All" timeout="60" >
<credentials passwordFormat= "Clear">
<user name="link" password="link"/>
<user name="test" password="test"/>
</credentials>
</forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
<location path="Nezasticena strana.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
Definisanje korisnika u bazi podataka
Kreira se tabela u bazi podataka koja sadrži ID korisnika njegovo korisničko ime i šifru. Kada korisnik unese korisničko ime (koje mora biti jedinstveno ) i šifru, izvršava se grupa sql komandi koja na osnovu unetog korisničkog imena pronalazi odgovarajući red u tabeli i proverava da li unteta šifra odgovara šifri u bazi.
Ukoliko je šifra tačna korisnik se prebacuje na zaštićenu stranu.
Primer realizacije strane za logovanje
Ovde je dat primer realizacije strane za logovanje kada su korisnici definisani u web.config fajlu. U ViewState promenljivoj brojPokusaja čuva se broj pokušaja logovanja. Ukoliko je broj pokušaja veći od 3 korisnik se prebacuje na stranu Zabranjeno.htm.
// Citaj username/password iz <credentials>.
if (FormsAuthentication.Authenticate(UserEmail.Value, UserPass.Value))
// Ako je OK idi na zasticenu stranu
FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, false);
else
{
// Obrisi sifru
UserPass.Value = "";
// pri trecem neuspelom pokusaja prebaci na html stranu Zabranjeno.htm
if (System.Convert.ToInt32(ViewState["brojPokusaja"]) > 2)
Response.Redirect("Zabranjeno.htm");
else
// inkrementiraj broj pokusaja
ViewState["brojPokusaja"] =
System.Convert.ToInt32(ViewState["brojPokusaja"]) + 1;
Autorizacija korisnika i uloga
Definiše se u web.config fajlu unutar sekcije za autorizaciju kao što je to prikazano u nastavku. Pristup zaštićenim stranama sajta je omogućen korisniku korisnik1, svim korisnicima koji pripadaju ulozi Admins dok je pristup zabranjen svim ostalim korisnicima.
// deo web.config fajla
<authorization>
<allow users=“korisnik1" />
<allow roles="Admins" />
<deny users="*" />
</authorization>
Kreiranje korisnika i uloga za web sajt
ASP.NET 2.0 pruža efikasan alat za lako kreiranje korinika web sajta. Takođe je moguće kreirati odgovrajuće uloge a onda korisnike dodeliti u ulogu. Podaci se smeštaju u lokalnu bazu ASPNETDB koja se nalazi u App_Data folderu.
Microsoft pasport autentifikacija
Princip rada Microsoft pasport autentifikacija je sledeći: klijent zahteva zaštičenu web stranu sa web servera, zahtev se prosleđuje ka IIS koji identifikuje korisnika kao anonimnog(aninimus) i prosleđuje zahtev ASP.NET-u. ASP.NET proverava postojanje autentifikacionog cookia kod klijenta, ukoliko cookie ne postoji vrši se redirekcija zahteva na Passport.com web sajt gde se vrši autentifikacija. Passport generiše stranu za logovanje koja se šalje do klijenta .Ukoliko su uneti podaci tačni Passport autentifikuje korisnika i vraća mu cookie sa autentifikacionom kartom. Klijent sada upućuje zahtev web serveru zajedno sa autentifikacionom kartom. IIS ponovo vrši autentifikaciju korisnika kao aninimnog i ASP.NET autentifikuje korisnika bazirano na cookie-u.