Lo scopo di sfuggire alle entità html

0

Per principi di sicurezza, ci viene spesso insegnato a disinfettare i campi di input per caratteri come & o ' in modo che non possano essere utilizzati per le iniezioni SQL ecc.

Tuttavia, ora ho un problema: ho davvero bisogno di memorizzare un input di stringa che conterrebbe questi caratteri. È un requisito aziendale. I miei scanner di codici lo contrassegnerebbero sicuramente in un avviso di avviso poiché si tratta della classica vulnerabilità di SQL injection se non si disinfetta l'input. Il mio database quindi memorizzerebbe la stringa &amp anziché & (solo un esempio). Ma questo non è quello che volevamo. Volevamo davvero il letterale & o ' memorizzato nel database.

Quali sono i modi migliori per farlo?

    
posta Pang Ser Lark 21.08.2015 - 12:40
fonte

3 risposte

4

Qualsiasi scanner di analisi statica decente non segnalerebbe una vulnerabilità se stavi memorizzando codice HTML grezzo nel tuo database - dopo tutto, è solo una stringa.

Le sequenze di stringhe diventano pericolose solo quando passano attraverso una "funzione sink".

Ad esempio, <script> è completamente sicuro da memorizzare nel tuo database. Infatti lo è anche Robert'); DROP TABLE Students;-- .

Quest'ultimo è pericoloso solo quando viene passato da una variabile stringa e concatenato a una query codificata nell'applicazione perché l'intera stringa viene passata al server di database e non conosce la differenza tra la query e i dati. Questo è il motivo per cui dovresti utilizzare le query parametrizzate per passare i dati al tuo database - quindi il DB stesso sa cosa interpretare come dati strongmente tipizzati e cosa interpretare come il costrutto della query stesso.

Quando si esegue l'output sul browser, è qui che è necessario codificare come appropriato. Solitamente si uscirà in formato HTML, quindi è necessario codificare HTML ( & diventa &amp; come dici tu). Se stai inviando a JSON o JavaScript (non è un campo minato), dovresti invece emettere il testo con la codifica di entità esadecimale ( \x38 ).

    
risposta data 22.08.2015 - 09:23
fonte
0

Se hai intenzione di mantenere quei caratteri, assicurati di aver usato variabili di binding (o istruzioni preparate) per persisterli.

Dovresti anche aggiungere la codifica HTML quando mostri le informazioni sulla tua interfaccia utente.

    
risposta data 21.08.2015 - 13:19
fonte
0

Se puoi evitare di memorizzare tali personaggi per i motivi che hai menzionato (e altri), questo è il meglio per te. Tuttavia, se sei costretto a considerare il tuo modello di business hai ancora un'opzione: indipendentemente dal linguaggio di programmazione che stai usando, puoi sempre fare affidamento sul concetto di query parametrizzate per raggiungere questo obiettivo. In questo modo prevedi iniezioni SQL .

    
risposta data 21.08.2015 - 13:17
fonte

Leggi altre domande sui tag