480 likes | 576 Views
ASP.NET 4.0 biztonság. Krizsán Zoltán. Hitelesítés fajtái. Támogatott (ezek közül csak 1 lehet): Windows ( default ) Basic Integrated Digest . NET Passport (MSN, Hotmail) sdk-t kell letölteni hozzá regisztrálni kell a Microsoft-nál fizetni kell érte Forms
E N D
ASP.NET 4.0biztonság Krizsán Zoltán
Hitelesítés fajtái Támogatott (ezek közül csak 1 lehet): • Windows (default) • Basic • Integrated • Digest • .NET Passport (MSN, Hotmail) • sdk-t kell letölteni hozzá • regisztrálni kell a Microsoft-nál • fizetni kell érte • Forms • süti kell hozzá (tikosított a javasolt) • Megfelelő táblák kellenek hozzá (aspnet_regsql.exe)
URL Hozzáférés szabályozás <authorization> <allowusers="comma-separated list of users" roles="comma-separated list of roles" verbs="comma-separated list of verbs"/> <denyusers="comma-separated list of users" roles="comma-separated list of roles" verbs="comma-separated list of verbs"/> </authorization> ? : anonymous *: bármelyik hitelesített user Verbs: HTTP kérés típusa (GET, POST, HEAD, or DEBUG).
URL Hozzáférés szabályozás II • Minden mappában lehet. • Machine.config-ban is van • Fájlokra is lehet<location path="SecuredPage.aspx"> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </location>
Szerepek - roles • Csoportok valójában • Személyek a csoportba • Hozzáférés csoportnak.
Fájl szintű hozzáférés szabályozás • Windows hitelesítés esetén • FileAuthorizationModule végzi • Az oprendszer ellenőrzi az adott user jogban futó webapp jogosultságát.
Hitelesítés beállítása • web.configxml-ben • mode, ami lehet: None, Windows, Forms, Passport • modulok végzik <?xmlversion=”1.0”?> <configuration> <system.web> <authenticationmode=”Forms” /> </system.web> </configuration>
Form alapú hitelesítés • Szerver oldali vezérlőkkel támogatott (wizard-ok) <authenticationmode="Forms"> <formsloginUrl="~/Account/Login.aspx"timeout="2880" /> </authentication>
Biztonságos form alapú • SSL jól jönne, • Állítsunk be titkosítást (3DES) <authenticationmode="Forms"> <formsloginUrl="Login.aspx" protection="Encryption"/> </authentication>
Tipikus forms titkosítás xml <system.web> <authenticationmode="Forms"> <formsloginUrl="login.aspx"/> </authentication> <authorization> <denyusers="?"/> </authorization> </system.web>
Login vezérlő <asp:LoginID="Login1"runat="server” /> • ConverttoTemplate (Visual Studio)
Login vezérlő eseményei • AuthenticateFires when a user is authenticated. • LoggedInFires when the user logs in to the site after a successful authentication. • LoggingInFires when a user submits login information but before the authentication takesplace. At this time, the operation can still be canceled. • LoginErrorFires when a login error is detected.
LoginName, LoginStatusvezérlők <table width="100%" border="0"><tr><td><asp:loginname ID="Loginname1" runat="server" FormatString="Welcome, {0}"/></td><td align="right"><asp:loginstatus ID="Loginstatus1" runat="server" LogoutText="Log off" /></td></tr></table>
LoginStatus vezérlő • <asp:LoginStatusID="LoginStatus1"runat="server" • LoginText="Sign In" • LogoutText="Sign Out" • LogoutPageUrl="./Default.aspx" • LogoutAction="Redirect"/>
LoginView vezérlő <asp:LoginViewID="LoginViewCtrl"runat="server"><AnonymousTemplate><h2>You are anonymous</h2></AnonymousTemplate><LoggedInTemplate><h2>You are logged in</h2>Submit your comment: <asp:TextBoxrunat="server"ID="CommentText"/><br/><asp:Buttonrunat="server"ID="SubmitCommentAction"Text="Submit"/></LoggedInTemplate></asp:LoginView>
MemberShip API • Létrehozni / törölni felhasználókat (web config mellé) • jelszó resetelés (email küldéssel) • jelszó generálás (email küldéssel) • felhasználók listázása / keresése • provider független módon (config file)
MemberShipAPI használata • Állítsuk be a form hitelesítést, tiltsuk a névtelen hozzáférést. • Hozzuk létre az adatokat tároló struktúrákat (sql esetén táblák). Ha a gépen van SQL Server Express, akkor majd létrehozza nekünk a rendszer. (App_Data/ASPNETDB.MDF) • Állítsuk be a connectionString-et, és a membership szolgáltatót. Az alap a SqlMembershipProvider. • Vegyük fel a felhasználókat. • Készítsük el a bejelentkező felületet.
Felhasználók beolvasása <asp:GridViewID="UsersGridView"runat="server”DataKeyNames="UserName” MembershipUserCollection _MyUsers; protectedvoidPage_Load(xxx){ _MyUsers = Membership.GetAllUsers(); UsersGridView.DataSource = _MyUsers; if (!this.IsPostBack){ UsersGridView.DataBind();}}
Felhasználó módosítás protectedvoidActionUpdateUser_Click(object sender, EventArgs e){ if (UsersGridView.SelectedIndex >= 0){ MembershipUser Current = _MyUsers[(string)UsersGridView.SelectedValue]; Current.Email = EmailText.Text; Current.Comment = CommentTextBox.Text; Current.IsApproved = IsApprovedCheck.Checked; Membership.UpdateUser(Current); // Refresh the GridView UsersGridView.DataBind(); } }
Felhasználó felvitele MembershipCreateStatusStatus; Membership.CreateUser(UserNameText.Text, PasswordText.Text, UserEmailText.Text, PwdQuestionText.Text, PwdAnswerText.Text, true, out Status);
Felhasználó törlése • Membership.DeleteUser("userName");
MS SQL támogatás létrehozása • aspnet_regsql.exe –A / -R • all: All features • m: Membership • r: Role manager • p: Profiles • c: Personalization • w: SQL Web event provider
Lefuttatott sqlszkriptekWindows\Microsoft.NET\Framework\v4.0.30319 • InstallCommon.sqlInstallMembership.sqlInstallPersistSqlState.sqlInstallPersonalization.sqlInstallProfile.SQLInstallRoles.sqlInstallSqlState.sqlInstallSqlStateTemplate.sqlInstallWebEventSqlProvider.sqlUninstallCommon.sqlUninstallMembership.sqlUninstallPersistSqlState.sqlUninstallPersonalization.sqlUnInstallProfile.SQLUninstallRoles.sqlUninstallSqlState.sqlUninstallSqlStateTemplate.sqlUninstallWebEventSqlProvider.sql
Saját login protectedvoidLoginAction_Click(object sender, EventArgs e) {Page.Validate();if (!Page.IsValid) return;if (FormsAuthentication.Authenticate(UsernameText.Text, PasswordText.Text)){FormsAuthentication.RedirectFromLoginPage(UsernameText.Text, false); }else{LegendStatus.Text= "Invalid username or password!"; }}
Login MembershipAPI-val if (Membership.ValidateUser(UsernameText.Text, PasswordText.Text)) { FormsAuthentication.RedirectFromLoginPage(UsernameText.Text, false); }else {LegendStatus.Text= "Invalid user name or password!";}
Login saját metodikával protectedvoidLoginCtrl_Authenticate(object sender, AuthenticateEventArgs e){ if(ellenorzes(LoginCtrl.UserName, LoginCtrl.Password)){ e.Authenticated = true; }else{ e.Authenticated = false;} }
Saját kijelentkezés FormsAuthentication.SignOut(); FormsAuthentication.RedirectToLoginPage();
Tulajdonságok • Nem kell kódot írni, • Jelszavak kezelése a rendszergazda dolga • Más technológiákkal együttműködés (WCF, WS, Sharepoint, …) • Nem szabható testre. • IIS beállítása szükséges. • Korlátozott kliensek integrated, vagy Digest esetén (csak IE és windows) • Nem lehet menedzselni a usereket.
Windows hitelesítés fajtái • Basic – sima szövegben • Minden böngésző tudja. • Adatok kódoltak, de nem titkosítottak. • Digest – adatok hash-ei • 401-es kód megy és nonce érték • Kliens a nonce segítségével hash kódot készít • Csak IE 5 fölött • Integrated • A felhasználó nem veszi észre (transzparens) • Adott user adatait küldi a böngésző (IE) • Csak LAN (AD)
Windows hitelesítésparaméterek lekérdezése if (Request.IsAuthenticated) { lblInfo.Text= "<b>Name: </b>" + User.Identity.Name; lblInfo.Text += "<br><b>Authenticated With: </b>"; lblInfo.Text += User.Identity.AuthenticationType; }
A felhasználó adott csoportban van? if (Request.IsAuthenticated) { lblInfo.Text = "<b>Name: </b>" + User.Identity.Name; if (User isWindowsPrincipal) { WindowsPrincipal principal = (WindowsPrincipal)User; lblInfo.Text += "<br><b>Power user? </b>"; lblInfo.Text += principal.IsInRole( WindowsBuiltInRole.PowerUser).ToString(); } }
Alapvető felh. kategóriák lekérdezése if (Request.IsAuthenticated){ lblInfo.Text = "<b>Name: </b>" + User.Identity.Name; WindowsIdentity identity = (WindowsIdentity)User.Identity; lblInfo.Text+= identity.Token.ToString(); lblInfo.Text+= identity.IsGuest.ToString(); lblInfo.Text+= identity.IsSystem.ToString(); } }
Megszemélyesítés <configuration> <system.web> <identityimpersonate="true"/> </system.web> </configuration>
Hozzáférés szabályozás kódból Csoporttagság ellenőrzés • Minden hitelesítésnél működik • Benne van e felhasználó a csoportban if(User.IsInRole(”Fonok")) { // akciók }
Hozzáférés szabályozás kódból PrincipalPermission példánnyal • PrincipalPermission létrehozása. • PrincipalPermission.Demand() hívása. • Kivétel elkapása, ha nincs elegendő jog. • Összefűzhető PrincipalPermissionpp3 = (PrincipalPermission)pp1.Union(pp2);pp3.Demand();
Hozzáférés szabályozás kódból Deklaratív ellenőrzés [PrincipalPermission(SecurityAction.Demand,Role= @"BUILTIN\Administrators")] publicpartialclass_Default : System.Web.UI.Page
Hozzáférés szabályozás kódból PrincipalPermission példánnyal try { PrincipalPermissionpp = newPrincipalPermission(null, @"BUILTIN\Administrators"); pp.Demand(); // kényes műveletek } catch(SecurityException err) { // nincs elég jog }