2011-09-19 11 views
8

Ho un modulo sulla mia pagina in cui gli utenti inseriscono i dati della carta di credito. È possibile che in HTML venga contrassegnata l'azione del modulo come costante per impedire che il JavaScript dannoso modifichi la proprietà dell'azione del modulo? Posso immaginare un attacco XSS che modifichi l'URL del modulo per consentire agli utenti di inviare i propri dati segreti al sito dell'aggressore.Impedire l'azione del modulo HTML da modificare

È possibile? Oppure esiste una funzionalità diversa nei browser Web che impedisce questo tipo di attacchi?

+0

In che modo il JavaScript dannoso entra nel modulo in primo luogo? Il modulo di pagamento consente di visualizzare il contenuto inviato dall'utente (XSS)? Quello sarebbe un modulo di pagamento insolito. –

risposta

5

Questo tipo di attacco è possibile, ma questo è il modo sbagliato per evitare che contro di essa. Se un hacker può modificare i dettagli del modulo, può facilmente inviare i dati segreti tramite un AJAX GET senza inviare il modulo. Il modo corretto per prevenire un attacco XSS è di essere sicuri di codificare tutti i contenuti non attendibili sulla pagina in modo tale che un hacker non abbia la possibilità di eseguire il proprio codice JavaScript in primo luogo.


Ulteriori informazioni sulla codifica ...

Il codice di esempio su StackOverflow è un ottimo esempio di codifica. Immagina che guaio sarebbe se ogni volta che qualcuno pubblicava qualche esempio di JavaScript, in realtà veniva eseguito nel browser. Per esempio,

<script type="text/javascript">alert('foo');</script>

se non fosse per il fatto che così codificato frammento di sopra, si sarebbe appena visto una finestra di avviso. Questo è ovviamente uno script piuttosto innocuo: avrei potuto codificare alcuni JavaScript che hanno rubato il tuo cookie di sessione e l'ho inviato a evil.com/hacked-sessions. Fortunatamente, tuttavia, SO non presume che tutti siano ben intenzionati e in realtà codificano il contenuto. Se si dovesse visualizzare il codice sorgente, per esempio, si vede che così ha codificato il mio perfettamente valido HTML e JavaScript in questo:

&lt;script type="text/javascript"&gt;alert('foo');&lt;/script&gt;

Così, anziché incorporare effettivi < e > caratteri dove ho usato, sono stati sostituiti con i loro equivalenti codificati in HTML (&lt; e &gt;), il che significa che il mio codice non rappresenta più un tag di script.

In ogni caso, questa è l'idea generale della codifica. Per maggiori informazioni su come deve essere codificata la, dipende da cosa si sta utilizzando lato server, ma la maggior parte di tutti i framework web include una sorta di utility di codifica HTML "pronta all'uso". La responsabilità dell'utente è quella di garantire che il contenuto fornito dall'utente (o altrimenti non attendibile) sia SEMPRE codificato prima del rendering.

+1

Cosa intendi esattamente con "codifica"? Sembra fantastico ma non sono sicuro di quali tecnologie comporterebbe. –

+0

So che il modo migliore per prevenire gli attacchi XSS è codificare tutto. Ma è difficile, puoi sempre dimenticare un campo. Non è così facile inviare i dati segreti usando AJAX a causa della stessa politica di origine. Posso ancora vedere alcuni vantaggi di avere una funzione del genere. –

+0

@Michal - È piuttosto facile inviare dati a un server di origine incrociata. Tutto quello che devi fare è inserire un tag script che punti lo script src = xxx "su un altro server e metta i dati come parametri di query sull'URL del tag script. Ecco come funziona JSONP, sebbene qui JSONP non sia necessario per inviare semplicemente dati su un altro server. – jfriend00

1

Non c'è niente che possa davvero impedirlo.

L'unica cosa che vorrei suggerire di fare è la conferma lato server di qualsiasi informazione proveniente dal server da un modulo utente.

Come dice il proverbio: Mai fidarsi l'utente

+0

Penso che questa domanda riguardi più la protezione dell'utente. –

+0

Protezione dell'utente? da cosa? – Neal

+0

Da inviare le proprie informazioni a un sito di attaccanti. –

Problemi correlati