Dimensione minima della casella di testo di input richiesta per gli attacchi XSS

2

Ho sotto il codice per accettare l'ID di accesso utente come input da parte dell'utente.

<input name="userName" type="text" id="userID" maxlength="8"/></td>

Il numero massimo di caratteri che un utente finale può inserire è 8 qui. Se si deve eseguire un attacco XSS come questo inserendo il codice sottostante nella casella di inserimento,

<script type="javascript>hello</script> ,

che non può essere inserito a causa della restrizione maxlength , posso essere certo che l'attacco XSS di questa categoria non può essere eseguito?

In generale, se l'input è limitato da maxlength , qual è il% minimo dimaxlength che una volta dovrebbe dare per limitare l'attacco XSS?

    
posta Vikas V 07.02.2013 - 07:43
fonte

2 risposte

9

La tua soluzione non previene alcun attacco XSS. L'attributo di tag di input HTML maxlength è un'istruzione per il browser web, che un utente malintenzionato può banalmente cambiare in qualsiasi browser moderno modificando dinamicamente il DOM.

<input name="userName" type="text" id="userID" maxlength="8"/>

Le routine di igienizzazione devono essere eseguite con il codice lato server. Questo è il tipo di risanamento che potrebbe essere eseguito se si tronca un input più lungo di ~ 8 caratteri quando si trova nel codice lato server (non nell'attributo HTML che un client può facilmente modificare). Attenzione che html / js è abbastanza indulgente (e dovresti testare tutti i browser), quindi una volta raggiunta una lunghezza maggiore di len ( <script> ) ~ 8, penso che questo meccanismo potrebbe fallire per un uso intelligente con alcuni brutti browser.

Tuttavia, questa è ancora una via insensata alla prevenzione dell'XSS (a meno che gli unici dati che la tua applicazione potrà mai visualizzare e che possa mai tornare a qualsiasi utente siano 8 caratteri e il tuo codice lato server tronca questo input dell'utente a ~ 8 caratteri). Hai davvero bisogno di:

  • Esegui un noto disinfettante / purificatore HTML che non hai scritto tu stesso o

  • Per prima cosa sfuggi tutti i caratteri html speciali nell'input dell'utente ( "&'<> alle loro versioni HTML di escape: &quot;&amp;&apos;&lt;&gt; ) e poi applica le regole di un linguaggio di markup leggero e sicuro (come reddit markdown) per consentire solo cose sicure come link [links](http://example.com) (verifica che il protocollo sia nella tua whitelist sicura, ad esempio http / https / ftp ) o testo in corsivo ( *italicized* ) o grassetto ( **bold** ).

risposta data 07.02.2013 - 08:27
fonte
4

Questa non è una protezione contro XSS. Questo perché maxlength è limitato sul lato client che può essere modificato.

es. se utilizzo gli strumenti di sviluppo di un browser e cambio il maxlength al volo, posso inserire e inviare stringhe più lunghe al server.

Quindi non utilizzare tali attributi come protezione.

Se qualcuno vuole iniettare un XSS, sceglierà un modo per aggirare tutte le misure di protezione del lato client.

    
risposta data 07.02.2013 - 08:27
fonte

Leggi altre domande sui tag