48
ASP.NET 4.0 biztonság Krizsán Zoltán

ASP.NET 4.0 biztonság

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

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)

Hitelesítés, hozzáférés

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>

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.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>

Saját hitelesítés

Struktúra

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)

Hitelesítő vezérlők II

Login vezérlő

<asp:Login ID="Login1" runat="server” />

Convert to Template (Visual Studio)

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);

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

Ha minden jól ment …

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

Biztonság szerkesztése webes felületről

Grafikusan webes felület hívása Visual Studio alól

Web Site Administration Tool

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;}

}

Saját kijelentkezés

FormsAuthentication.SignOut();

FormsAuthentication.RedirectToLoginPage();

Windows hitelesítés folyamata I

Windows hitelesítés folyamata II

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

Hozzáférés szabályozás kódból PrincipalPermission példánnyal

try {PrincipalPermission pp = new

PrincipalPermission(null, @"BUILTIN\Administrators");

pp.Demand(); // kényes műveletek}catch (SecurityException err) { // nincs elég jog}