2010-01-11 10 views
5

Tengo algunos campos de texto de respuesta libre y no estoy seguro de cómo eliminarlos para evitar la inyección de SQL. ¿Algunas ideas?Prevenir la inyección SQL en campos de texto de respuesta libre en ASP clásico

+0

Habría encontrado la respuesta usted mismo si hubiera buscado en http://stackoverflow.com/questions/tagged/sqlinjection. –

+1

@John te refieres a http://stackoverflow.com/questions/tagged/sql-injection+asp-classic y, sin embargo, uno de esos se marcó como duplicado. – cregox

Respuesta

16

Cree un parameterized query en lugar de concatenar la entrada del usuario en la consulta.

Aquí es cómo hacer esto en ASP clásico: http://blog.binarybooyah.com/blog/post/Classic-ASP-data-access-using-parameterized-SQL.aspx

También es importante tener en cuenta que la única forma en que puede estar 100% seguro de inyección SQL es parametrizar cualquier instrucción SQL que utiliza la entrada del usuario, incluso una vez que está en la base de datos. Ejemplo: Supongamos que toma la entrada del usuario a través de una consulta parametrizada o un procedimiento almacenado. Estará a salvo en el inserto, sin embargo, debe asegurarse de que todo lo que se encuentre en el camino que use esa entrada también use un parámetro. La entrada del usuario directamente concatenada es una mala idea en cualquier lugar, incluso dentro de la base de datos.

+2

Y si tiene que escribir ASP clásico, hágalo en JScript, ¡mucho mejor! Y, IIRC, se desempeña mejor también. – RedFilter

+2

@OrbMan: ¿Cómo es eso relevante? JScript es más agradable si no te importa aislarte, sin embargo, la gran mayoría de ASP está en VBScript. Francamente, si tiene que usar ASP clásico, hágalo en VBScript, es mucho más fácil integrar ejemplos y será más fácil de leer para otros desarrolladores típicos de ASP. – AnthonyWJones

0

Llama a storedprocedure.

EDIT: Solo aclarar. Crear sql dinámico en una sp puede ser tan peligroso como hacerlo en la aplicación, pero vincular las entradas del usuario a una consulta lo protegerá contra la inyección sql, como se describe aquí (discusión específica de Oracle, pero el principio se aplica en otro lugar):

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

no es SQL dinámico que es el tema (todo el SQL es dinámico en Oracle realidad - incluso SQL estático en pro * c/plsql). Es "la construcción " de este sql que es el problema . Si un usuario le da entradas - , deben estar ENCUADERNADOS en la consulta - no concatenados. El segundo concatena la entrada del usuario en tu SQL - es como si les hubieras dado la posibilidad de pasar tu código y ejecutaras ese código. Simple y simple.

+3

No lo creo Es un mito que los procedimientos almacenados protegen contra las vulnerabilidades de inyección de SQL. Es tan probable que genere una consulta SQL dinámica insegura en un procedimiento como en el código de la aplicación. –

+0

No defiendo construir sql dinámico dentro de una sp, pero proporcionando las entradas de campo de texto como parámetros a una instrucción con parámetros dentro de la sp. – davek