2009-10-06 32 views
7

Recentemente ho ereditato un classico sito Web ASP con una serie di istruzioni di inserimento SQL incorporate che sono vulnerabili agli attacchi di SQL injection.Classic ASP SQL Injection

Queste istruzioni di inserimento vengono eseguite tramite l'oggetto comando ADO.

L'impostazione della proprietà Preparato dell'oggetto ADO Command su true assicurerà che la query sia parametrizzata prima dell'esecuzione, riducendo così il rischio di SQL injection?

+2

possibile duplicato di [Protezione ASP SQL Classic Injection] (http://stackoverflow.com/questions/149848/classic-asp-sql-injection-protection) – NotMe

risposta

6

No, se si crea una stringa SQL con valori che si ottiene direttamente da "esterno", una "istruzione preparata" non sarà di aiuto.

un

sSQL = "SELECT * from mytable where mycolumn = '" + querystring("value") + "'" 

è ancora in cerca di guai. L'unico modo per risolverlo è usare i parametri nella tua query.

-2

Quello che vorrei suggerisco di fare è scrivere una funzione per disinfettare l'input dell'utente, quindi eseguire tutte le variabili richiesta tramite questo. Quando ho scritto il mio l'ho fatto cose del genere: citazioni

  • fuga singoli,
  • rimuovere; e altri caratteri speciali e
  • assicurati di non poter - (commentare) la fine dell'istruzione.

iniezione La maggior parte di SQL avrebbe cercato qualcosa di simile ' or 1=1 or a=' modo che il codice SQL sarebbe:

SELECT * from mytable where mycolumn = '' or 1=1 or a='' 

Così fuga apici è il vero grande è necessario preoccuparsi.

+1

Un sacco di persone cadono in quella trappola. La creazione di funzioni rende il codice meno leggibile e non è a prova di futuro. Non ho modo di rintracciare tutti i classici siti ASP che ho costruito anni fa, per non parlare dell'aggiornamento di una funzione che potrebbero utilizzare o meno. I parametri ADO o le stored procedure parametrizzate sono la strada da percorrere. –

+0

Sono d'accordo che i parametri sono le migliori pratiche, ma se stai provando a ripulire un mucchio di codice in modo molto veloce, avvolgere tutti gli input dell'utente in una funzione è più semplice. –

+1

Non credo ci voglia molto tempo per aggiungere un po 'di oCmd.Parameters .Appendete le dichiarazioni di oCmd.CreateParameter (...) al vostro codice, e onestamente in situazioni come questa penso che sia meglio concentrarsi sulla qualità piuttosto che sulla velocità, in particolare se non avete il tempo di fare il lavoro due volte. –