Chapter XII. User And Data Security (Adat és felhasználó védelem)
Ez a fejezet ismét egy olyan fejezet, amelyben leírtak szinte teljesen eltérnek Winforms-nál illetve Webforms-nál. Én most az utóbbival fogok foglalkozni.
Az első lecke végre valahára úgy kezdődik, hogy a dolgok mögötti fogalmakat megmagyarázza. Ez azért tetszik most ennyire, mert az előtte illetve utána lévő néhány fejezetben sajnos ez nem annyira sikerült. Így mindenkinek világos, mi az autentikáció (felhasználó azonosítás) és mi az autórizáció (jogosultság kezelés).
Az előbbi két fogalomra épül az RBS (Role Based Security, szerepalapú biztonság). Webalkalmazásnál kicsit másképp is történhet a felhasználó azonosítás, mint winforms alatt. Hiszen lehetőségünk van windows, űrlap alapú(forms) és passport felhasználó hitelesítésre vagy akár Anonymous autentikációra is. Ezért webalkalmazásoknál inkább a Roles, MemberShip illetve FormsAuthentication osztályokat használjuk.
Egy hasznos tulajdonsága a FormsAuthentication osztálynak a RequireSSL, amelyet, ha true állítunk, akkor a sütik, melyek tartalmazzák az authentication ticket –et SSL-en (Secure Sockets Layer) keresztül jutnak el a klienstől a szerverig, illetve vissza. Ezt akár a web.config-ban is beállíthatjuk:
<authentication mode="Forms">
<forms loginUrl=" login.aspx"
cookieless="UseCookies"
requireSSL="true"
slidingExpiration="false"
…
</authentication>
Az első lecke végre valahára úgy kezdődik, hogy a dolgok mögötti fogalmakat megmagyarázza. Ez azért tetszik most ennyire, mert az előtte illetve utána lévő néhány fejezetben sajnos ez nem annyira sikerült. Így mindenkinek világos, mi az autentikáció (felhasználó azonosítás) és mi az autórizáció (jogosultság kezelés).
Az előbbi két fogalomra épül az RBS (Role Based Security, szerepalapú biztonság). Webalkalmazásnál kicsit másképp is történhet a felhasználó azonosítás, mint winforms alatt. Hiszen lehetőségünk van windows, űrlap alapú(forms) és passport felhasználó hitelesítésre vagy akár Anonymous autentikációra is. Ezért webalkalmazásoknál inkább a Roles, MemberShip illetve FormsAuthentication osztályokat használjuk.
Egy hasznos tulajdonsága a FormsAuthentication osztálynak a RequireSSL, amelyet, ha true állítunk, akkor a sütik, melyek tartalmazzák az authentication ticket –et SSL-en (Secure Sockets Layer) keresztül jutnak el a klienstől a szerverig, illetve vissza. Ezt akár a web.config-ban is beállíthatjuk:
<authentication mode="Forms">
<forms loginUrl=" login.aspx"
cookieless="UseCookies"
requireSSL="true"
slidingExpiration="false"
…
</authentication>
AuthenticationTicket készítésére akkor van szükségünk, ha egyedi azonosítást szeretnénk, íme egy nagyon egyszerű példa:
if (FormsAuthentication.Authenticate(UserName.Value, UserPassword.Value))
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(UserName.Value, false, 5000);
FormsAuthentication.RedirectFromLoginPage(UserName.Value, Persist.Checked);
}
És ha esetleg lejárna a süti érvényességének (életének) ideje, akkor a RenewTicketIfOld() metódus segítségével tudjuk megújítani, bár célszerűbb a csúszó időt beállítani (lsd. fentebb config fájl /slidingepiration/).
if (FormsAuthentication.Authenticate(UserName.Value, UserPassword.Value))
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(UserName.Value, false, 5000);
FormsAuthentication.RedirectFromLoginPage(UserName.Value, Persist.Checked);
}
És ha esetleg lejárna a süti érvényességének (életének) ideje, akkor a RenewTicketIfOld() metódus segítségével tudjuk megújítani, bár célszerűbb a csúszó időt beállítani (lsd. fentebb config fájl /slidingepiration/).
A MemberShip-nél én most csak a MemberShipUser osztályt emelném ki. Ezen keresztül egy-két infót eltudunk érni a felhasználókról. De sokszor szükségünk van sok egyéb adatra is, nem csak az e-mail címre. Ilyenkor használhatjuk a Profile-t, vagy felüldefiniálhatjuk a MemberShipUser osztályt. Erre íme egy tanulságos tutorial:
http://msdn2.microsoft.com/en-us/library/ms366730(vs.90).aspx
http://msdn2.microsoft.com/en-us/library/ms366730(vs.90).aspx
A Role Managment osztályok közül számunkra igazándiból a fontosabbak: a Roles, a RolePrincipal illetve a RoleManagerModule. A Roles-ról már volt régebben szó, így most őt nem vesézném ki. A RolePrincipal az az osztály mely tartalmazza az adott userhez tartozó szerepköröket. Ezt veheti adatbázisból vagy akár sütiből is. A RoleManagerModule osztály kezeli a RolePrincipal objektumokat.
ASP.NET esetén kétfajta jogosultság kezelésről beszélhetünk: Fájl illetve Url alapú. Ezek alapján beszélhetünk FileAuthorizationModule -ról illetve UrlAuthorizationModule –ról. Az első esetén az aspx illetve asmx fájlokhoz tartozó ACL jogosultságot ellenőrzi le. Ha nem windows autentikációt használunk, akkor annak a windows user-nek ellenőrzi a jogosultságait, akinek a nevében futnak az ASP.NET process.
Az UrlAuthorizationModule pedig a web.config-ból már jól ismert allow illetve deny segítségével van megvalósítva.
Az UrlAuthorizationModule pedig a web.config-ból már jól ismert allow illetve deny segítségével van megvalósítva.
Végül még a titkosításos részhez lenne két hozzáfűzni valóm. Régebben halottam még egy nagyon jó szemléltetést a hashelésre. A hashelést magyarul néha sózásnak is hívják. Ebből következően, ha van egy masszánk, amit megsózunk, akkor kapunk egy „másik” masszát. Ebből már nem tudjuk kiszedni a sót (tehát a hashelt alakot nem tudjuk vissza fejteni). De újra elő tudjuk állítani a sózott masszát, amelyet össze tudunk hasonlítani egy régebbi sózott masszával (tehát determinisztikus, így reprodukálható).
Ha a beépített ASP.NET felhasználó kezelést/hitelesítést használjuk, akkor a userek jelszavainak az ASPNETDB adatbázisban egy-egy MD5-ös hashelt alakja lesz eltárolva!
Ha a beépített ASP.NET felhasználó kezelést/hitelesítést használjuk, akkor a userek jelszavainak az ASPNETDB adatbázisban egy-egy MD5-ös hashelt alakja lesz eltárolva!
A szimmetrikus illletve asszimmetrikus titkosítással kapcsolatban pedig az alábbi két cikket ajánlom a figyelmetekbe:
http://www.biztostu.hu/mod/resource/view.php?id=463
http://www.biztostu.hu/mod/resource/view.php?id=464
http://www.biztostu.hu/mod/resource/view.php?id=463
http://www.biztostu.hu/mod/resource/view.php?id=464
Végül pedig egy idézet:
Aki azt hiszi, hogy feltörhetetlen titkosítási módszert talált ki, az vagy hihetetlenül ritka zseni vagy naiv és tapasztalatlan
Phil Zimmermann
Aki azt hiszi, hogy feltörhetetlen titkosítási módszert talált ki, az vagy hihetetlenül ritka zseni vagy naiv és tapasztalatlan
Phil Zimmermann