L'escaping / taglio di impedisce di XSS [duplicato]

1

Ho un input, che mostra un valore (Firstname) in una casella sulla pagina. Sul lato server, l'input è scappato seguendo la regola (vb.net):

Public Function UnescapeString(strValue As String) As String
    If (String.IsNullOrEmpty(strValue)) Then Return strValue
    strValue = Replace$(strValue, """", "")
    strValue = Replace$(strValue, "'", "")
    strValue = Replace$(strValue, "<", "")
    strValue = Replace$(strValue, ">", "")
    Return strValue
End Function

L'output non è stato convalidato affatto.

Non posso credere che sfuggire l'input da <> potrebbe essere così sicuro come sembra per me!?

Ci sono trucchi per iniettare il codice o è la cosa più importante per prevenire XSS qui, per tagliare o sfuggire <> segni?

Domanda 2: Sto pianificando una riscrittura di questo metodo in questo modo:

   strValue = Replace$(strValue, """", "&quot;")
   strValue = Replace$(strValue, "<", "&lt;")
   strValue = Replace$(strValue, ">", "&gt;")
   strValue = Replace$(strValue, "&", "&amp;")
   strValue = Replace$(strValue, "'", "&#x27;")
   strValue = Replace$(strValue, "/", "&#x2F;")
   strValue = System.Web.HttpUtility.HtmlEncode(strValue) <- or only this

Sto pianificando di non tagliare, ma di eseguire correttamente i valori di escape, come nell'esempio sopra. Oppure uso solo% di% co_de di .NET (ultima riga), che codifica anche caratteri speciali come le dieresi tedesche, oltre a segni pericolosi come HtmlEncode .

    
posta Timbo 07.09.2018 - 15:26
fonte

1 risposta

1

Il problema è che puoi usare un'altra codifica come base64 che può essere elaborata dal tuo browser per creare un XSS di successo, invece usa HttpContext.Current.Server.HtmlEncode ().

Esempio:

$ echo '<script>' | base64 
PHNjcmlwdD4K
$echo PHNjcmlwdD4K | base64 -D
<script>

Esempio di Javascript:

 var decodedData=window.atob('PGlmcmFtZSBzcmM9L3hzcy9iYXNlLmh0bWwgd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJT48L2lmcmFtZT4K');
     document.write(decodedData);

Esempio di Iframe:

src=data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4K

Un ulteriore punto, potresti non mantenere questo codice per tutta la vita del codice, un nuovo exploit potrebbe aggirare il tuo filtro, si spera che i manutentori di .NET pubblicheranno un aggiornamento che lo indirizzi e che viene applicato dagli amministratori di sys.

    
risposta data 07.09.2018 - 15:37
fonte

Leggi altre domande sui tag