Upload
yuli-hays
View
27
Download
4
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
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><allow users="comma-separated list of users"roles="comma-separated list of roles"verbs="comma-separated list of verbs" /><deny users="comma-separated list of users"roles="comma-separated list of roles"verbs="comma-separated list of verbs" /></authorization>
? : anonymous*: bármelyik hitelesített userVerbs: 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>
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.config xml-ben
mode, ami lehet: None, Windows, Forms, Passport
modulok végzik
<?xml version=”1.0”?>
<configuration>
<system.web>
<authentication mode=”Forms” />
</system.web>
</configuration>
Form alapú hitelesítés
Szerver oldali vezérlőkkel támogatott (wizard-ok)
<authentication mode="Forms">
<forms loginUrl = "~/Account/Login.aspx" timeout = "2880" />
</authentication>
Biztonságos form alapú
SSL jól jönne,
Állítsunk be titkosítást (3DES)
<authentication mode="Forms"> <forms loginUrl="Login.aspx" protection="Encryption"/></authentication>
Tipikus forms titkosítás xml
<system.web>
<authentication mode="Forms">
<forms loginUrl="login.aspx" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
Hitelesítő vezérlők
Név Leírás
Login Felhasználó név, jelszó bekérése. (Authenticate event)
LoginView Csak bejelentkezett felhasználók számára látható a tartalma.
LoginStatus Login link a nem bejelentkezetteknek, logout a bejelentkezetteknek.
LoginName A bejelentkezett felhasználó neve.
PasswordRecovery
Email küldése ha elfelejtette a jelszót.
CreateUserWizard
Információk bekérése és regisztráció
ChangePassword
Jelszó megváltoztatása. (Akik be vannak jelentkezve)
Login vezérlő eseményei
Authenticate Fires when a user is authenticated.
LoggedIn Fires when the user logs in to the site after a successful authentication.
LoggingIn Fires when a user submits login information but before the authentication takes place. At this time, the operation can still be canceled.
LoginError Fires when a login error is detected.
LoginName, LoginStatus vezé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:LoginStatus ID="LoginStatus1" runat="server"
LoginText="Sign In"
LogoutText="Sign Out"
LogoutPageUrl="./Default.aspx"
LogoutAction="Redirect" />
LoginView vezérlő
<asp:LoginView ID="LoginViewCtrl" runat="server"><AnonymousTemplate><h2>You are anonymous</h2></AnonymousTemplate><LoggedInTemplate><h2>You are logged in</h2>Submit your comment: <asp:TextBox runat="server" ID="CommentText" /><br /><asp:Button runat="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)
MemberShip API használata
1. Állítsuk be a form hitelesítést, tiltsuk a névtelen hozzáférést.
2. 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)
3. Állítsuk be a connection String-et, és a membership szolgáltatót. Az alap a SqlMembershipProvider.
4. Vegyük fel a felhasználókat.
5. Készítsük el a bejelentkező felületet.
Felhasználók beolvasása
<asp:GridView ID="UsersGridView" runat="server”DataKeyNames="UserName”
MembershipUserCollection _MyUsers;protected void Page_Load(xxx){_MyUsers = Membership.GetAllUsers(); UsersGridView.DataSource = _MyUsers; if (!this.IsPostBack){ UsersGridView.DataBind();}}
Felhasználó módosításprotected void ActionUpdateUser_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
MembershipCreateStatus Status;
Membership.CreateUser(
UserNameText.Text, PasswordText.Text, UserEmailText.Text, PwdQuestionText.Text, PwdAnswerText.Text,
true, out Status);
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 sql szkriptekWindows\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
protected void LoginAction_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 Membership API-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
protected void LoginCtrl_Authenticate(object sender, AuthenticateEventArgs e){
if (ellenorzes(LoginCtrl.UserName, LoginCtrl.Password)){
e.Authenticated = true;
}else{
e.Authenticated = false;}
}
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 is WindowsPrincipal) { 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>
<identity impersonate="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
1. PrincipalPermission létrehozása.
2. PrincipalPermission.Demand() hívása.
3. Kivétel elkapása, ha nincs elegendő jog.
Összefűzhető PrincipalPermission pp3 = (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")]
public partial class _Default : System.Web.UI.Page