2010-01-11 2 views
5

Ho alcuni campi di testo a risposta libera e non sono sicuro di come scriverli per evitare l'iniezione SQL. Qualche idea?Previene l'iniezione SQL nei campi di testo di risposta libera nel classico ASP

+0

Se avessi cercato http://stackoverflow.com/questions/tagged/sqlinjection, avresti trovato la risposta da solo. –

+1

@ Giovanni intendi http://stackoverflow.com/questions/tagged/sql-injection+asp-classic e tuttavia uno di questi è stato contrassegnato come duplicato. – cregox

risposta

16

Creare un parameterized query invece di concatenare l'input dell'utente nella query.

Ecco come fare questo in ASP classico: http://blog.binarybooyah.com/blog/post/Classic-ASP-data-access-using-parameterized-SQL.aspx

E 'anche importante notare che l'unico modo si può essere sicuri al 100% da SQL injection è di parametrizzare qualsiasi istruzione SQL che utilizza l'input dell'utente, anche una volta nel database. Esempio: supponiamo che tu prenda l'input dell'utente tramite una query parametrizzata o una stored procedure. Sarai al sicuro sull'inserto, tuttavia devi assicurarti che qualsiasi cosa in fondo alla strada che usa quell'input utilizzi anche un parametro. Concatenare direttamente l'input dell'utente è una cattiva idea ovunque, anche all'interno del db.

+2

E se devi scrivere ASP classico, fallo in JScript, molto più bello! E, IIRC, funziona anche meglio. – RedFilter

+2

@OrbMan: Com'è pertinente ?? JScript è più bello se non ti dispiace isolare te stesso, ma la stragrande maggioranza di ASP è in VBScript. Francamente, se devi usare l'ASP classico, fallo in VBScript, è molto più facile integrare gli esempi e sarà più semplice da leggere per altri sviluppatori ASP. – AnthonyWJones

0

Chiama a storedprocedure.

MODIFICA: Giusto per chiarire. Costruire sql dinamici in un SP può ovviamente essere altrettanto pericoloso che farlo nell'app, ma il binding degli input dell'utente in una query ti proteggerà da SQL injection, come descritto qui (discussione specifica per Oracle, ma il principio si applica altrove):

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:23863706595353

non è SQL dinamico che è la questione (tutto SQL è dinamica in Oracle in realtà - anche SQL statica in Pro * C/plsql). È "la costruzione " di questo sql che è il problema . Se un utente ti fornisce degli input - , questi devono essere inseriti nella query - non concatenati. Il secondo è concatenare l'input dell'utente nel tuo SQL - è come se tu avessi dato loro la possibilità di passare il tuo codice e tu esegui quel codice. Chiaro e semplice.

+3

Non ci credo. È un mito che le stored procedure proteggano dalle vulnerabilità di SQL injection. È altrettanto probabile creare una query SQL dinamica non sicura in una procedura come nel codice dell'applicazione. –

+0

Non sto sostenendo la creazione di sql dinamico all'interno di una sp, ma fornendo le voci del campo di testo come parametri a un'istruzione parametrizzata all'interno della sp. – davek