Parametri della stringa di query sicura

6

Ho un'applicazione che usa il componente Thick box jQuery per aprire una pagina popup.

E ho passato i miei parametri nella stringa di query in questo modo:

 <a id="btnShowPopup6" runat="server" class="thickbox" href='<%#"RollUp.aspx?TCode="+Eval("Code")+"...."+"&AR=1"+"&TBiframe=true&height=530&width=750"%>'>

Questa è l'unica scelta che ho, non posso usare le variabili di sessione con questo metodo o i parametri di post in modo da utilizzare solo la stringa di query.

Come posso proteggere la mia stringa di query in modo che l'utente non possa giocare con loro? Qual è il modo migliore per crittografare la mia stringa di query?

    
posta Anyname Donotcare 19.12.2012 - 15:09
fonte

1 risposta

5

Mettere i valori forniti dall'utente in una chiamata eval() è un'idea orribile, poiché essenzialmente equivale a una vulnerabilità legata all'esecuzione di codice in modalità remota. Supponiamo che il tuo codice assomigli a questo ...

var data = eval(webRequest.Parameters["p"]);

Ora immagina di inserirlo nel parametro p ...

System.IO.File.Delete(@"c:\windows\system32\ntoskrnl.exe");

Ops! Ho appena cancellato il tuo kernel.

Non ci sarà alcun problema con l'escaping funzionerà qui - è un concetto fondamentalmente rotto.

La crittografia dei parametri non fa altro che complicare le cose. Scegli l'approccio corretto e utilizza una variabile di sessione come la lingua è progettata per fare.

Aggiornamento: Per essere chiari, sto parlando di eval () in senso generico. Se stai utilizzando il metodo di associazione Eval su un controller di dati in C #, dovresti essere OK finché non ci sono parametri utente, altrimenti possono far sì che il tuo codice scarichi valori arbitrari dal tuo database, senza nemmeno bisogno di SQL injection.

    
risposta data 19.12.2012 - 15:45
fonte

Leggi altre domande sui tag