Come evitare le vulnerabilità XSS in ASP.Net (MVC)?

Di recente ho notato che avevo un grosso buco nella mia applicazione perché avevo fatto qualcosa del tipo:

<input type="text" value="" /> 

So che avrei dovuto usare Html.Encode , ma esiste un modo per farlo per tutti i valori, senza doverlo fare esplicitamente?

Ci sono alcuni modi:

  • Utilizzare la syntax <%: %> in ASP.NET MVC2 / .NET 4.0. (Che è solo zucchero sintattico per Html.Encode() )
  • Segui le indicazioni di Phil Haack in cui descrive i dettagli utilizzando la libreria Anti-XSS come motore di codifica “predefinito” per ASP.NET.

Guarda questo video di Scott Hanselman e Phil Haack. Coprono XSS, CSRF, JSON Hijacking in particolare con ASP.Net MVC.

In ASP.Net 4.0 o versioni successive, usa sempre <%: ...%> invece di <% = ...%> … fa la codifica HTML per te.

La spiegazione di Scott Gu .

Fatto ciò, è abbastanza semplice ingrezzare il tuo codice per <% = regolarmente come precauzione di sicurezza.

Inoltre, stai usando la libreria Microsoft Anti-XSS ?

Sintassi per la codifica HTML

  1. Sintassi <%: model.something%> in WebForms

  2. È automatico in Razor cioè @ model.something si codificherà automaticamente automaticamente senza bisogno di fare nulla per codificare.

  3. I metodi MVC3 HTML Helper restituiscono automaticamente la stringa codificata. ad es. Html.Label restituirà la stringa codificata

Ulteriori informazioni sullo scripting cross-site

http://thirum.wordpress.com/2013/10/24/how-asp-net-mvc-prevents-cross-site-scriptingxss-attack/

Tag HTML potenzialmente pericolosi:

Sebbene non sia un elenco completo, i seguenti tag HTML comunemente usati potrebbero consentire a un utente malintenzionato di inserire codice di script:

      

Un utente malintenzionato può utilizzare attributi HTML come src, lowsrc, style e href in combinazione con i tag precedenti per iniettare script cross-site. Ad esempio, l'attributo src del tag può essere una fonte di iniezione, come mostrato nei seguenti esempi.

    

Un utente malintenzionato può inoltre utilizzare il tag per iniettare uno script modificando il tipo MIME come mostrato di seguito.