È possibile iniettare valori in un elenco a discesa?

17

Supponiamo che una pagina ASP.NET o qualsiasi pagina html contenga un elenco a discesa con una serie di prezzi. Nel pubblicare la pagina, il codice esamina la selezione dell'elenco a discesa per un calcolo. È possibile che qualcuno modifichi i valori e pubblichi la pagina senza che il server sappia che la pagina è stata manomessa?

Aggiorna

Mi è stato detto che ASP.NET offre una certa protezione da questo con Proprietà Page.EnableEventValidation . Con questo abilitato (abilitato per impostazione predefinita), provare a modificare il valore di un controllo ASP provocherà un errore:

Invalid postback or callback argument.  Event validation is enabled using in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

    
posta drobison 11.09.2013 - 18:29
fonte

5 risposte

32

Gli elenchi a discesa sono un costrutto HTML / UI. Non c'è alcun concetto di questo tipo in HTTP, che è il modo in cui il client e il server in ultima analisi parlano tra loro.

Quindi, mentre sì, un client potrebbe modificare la pagina, che non è assolutamente necessaria, perché in realtà non c'è bisogno di essere una pagina. Alla fine un client invia semplicemente una richiesta HTTP al server e contiene alcuni dati, e quei dati potrebbero essere i valori inseriti nel modulo HTML, oppure potrebbero essere valori arbitrari scelti secondo il capriccio dell'utente.

La linea di fondo è, non puoi fidarti dell'input . Qualsiasi cosa inviata dal cliente dovrebbe essere sospetta, non è garantito che sia ciò che si aspetta e deve essere convalidato sul server prima dell'accettazione.

    
risposta data 11.09.2013 - 18:37
fonte
9

Semplicemente sì, si può fare. L'utente scarica l'HTML, modifica il contenuto e invia il da con contenuto modificato.

Assicurati assolutamente di convalidare tutti i dati del modulo prima che colpiscano il tuo DB. A seconda del framework web, di solito c'è un modo per limitare le opzioni esattamente a ciò che si specifica.

    
risposta data 11.09.2013 - 19:05
fonte
4

Se installi un proxy sul tuo client, come Paros, potresti facilmente intrappolare la risposta dal tuo browser prima che arrivi al server e modificare qualsiasi valore, inclusa l'opzione scelta dall'elemento del modulo a discesa. Una volta che hai visto quanto è facile, puoi facilmente immaginare come potresti farlo in una varietà di modi programmatici - inclusi i componenti aggiuntivi nel browser se il tuo browser è stato compromesso.

Il assolutamente unico modo per proteggersi da questo è controllare che il valore una volta arrivato al server, cioè che il valore sia valido.

Questo vale per tutti i dati inviati al server, i dati del modulo, i dati del percorso GET URL e persino le intestazioni.

La sicurezza basata su browser / client non ha alcuna sicurezza.

    
risposta data 11.09.2013 - 22:28
fonte
3

Se utilizzi Google Chrome, fai semplicemente clic con il pulsante destro del mouse e controlla Elemento .... Quindi vai a quel particolare tag di selezione, fai clic con il pulsante destro del mouse e "Modifica come HTML" per aggiungere una nuova opzione.

    
risposta data 12.09.2013 - 08:00
fonte
0

potrebbero iniettare i dati nella risposta, ma se il codice lato server non sta cercando ciò che stanno dando, allora è lì che viene interrotta l'iniezione. La convalida nel codice lato server è la migliore.

    
risposta data 11.09.2013 - 19:40
fonte

Leggi altre domande sui tag