.NET offre 8+ modi per codificare i dati per prevenire attacchi XSS. Quale dovrei usare quando? [chiuso]

2

Sto cercando modi per utilizzare .NET per prevenire gli attacchi XSS e ho trovato i seguenti metodi per codificare i dati:

        string asdf = WebUtility.UrlEncode(code);
        string asdf1 = HttpUtility.UrlEncode(code);
        string asdf1a = HttpUtility.UrlEncodeUnicode(code); // OBSOLETE
        string asdf1b = HttpUtility.UrlPathEncode(code);
        string asdf1c = Uri.EscapeDataString(code);
        string asdf1d = Uri.EscapeUriString(code);
        string asdf1e = HttpUtility.HtmlEncode(code);
        string asdf1f = HttpUtility.HtmlAttributeEncode(code);

(Ho omesso i metodi byte [] ... ma ce ne sono altri)

Dato che ognuno di questi metodi funziona in modo completamente diverso e si trova in classi completamente diverse, suppongo che sia facile causare un problema XSS dato il mix sbagliato di scelte.

Per una determinata situazione, quando è opportuno utilizzare un determinato metodo di codifica? Perché?

    
posta random65537 04.03.2014 - 15:59
fonte

1 risposta

4

Questa è una specie di fonte per prevenire XSS in ASP.NET (almeno da Microsoft):

Procedura: impedire la creazione di script tra siti in ASP.NET

Alcune cose importanti da approfondire dall'articolo specifico della tua domanda:

  • Utilizza il metodo HttpUtility.HtmlEncode per codificare l'output se contiene input dell'utente o da altre fonti come i database .

  • usa HttpUtility.UrlEncode per codificare URL di output se sono costruiti dall'input .

Per quanto riguarda HTMLAttributeEncode :

  • Il metodo HtmlAttributeEncode converte solo virgolette ("), e commerciali (&) e parentesi angolari (<) in equivalenti entità di caratteri. È considerevolmente più veloce della% metodoHtmlEncode.

  • Il risultato della stringa dal metodo HtmlAttributeEncode dovrebbe essere utilizzato solo per gli attributi a virgolette . Potrebbero sorgere problemi di sicurezza quando si utilizza il metodo HtmlAttributeEncode con attributi a virgoletta singola.

E infine, con UriEscapeString , usa quello se quello che stai sfuggendo è un URI . Questa domanda SO illustra la differenza tra UriEscapeString e UriEscapeDataString .

    
risposta data 04.03.2014 - 16:49
fonte

Leggi altre domande sui tag