Cuando comencé a escribir las primeras declaraciones SQL en mis programas me sentí bastante cómodo al protegerme contra SQL-Injection con un método muy simple que un colega me mostró. Reemplazó todas las comillas simples con dos comillas simples.Sentencias SQL paramétricas vs. método muy simple
Así que, por ejemplo, hay un campo de búsqueda en el que puede introducir un nombre de cliente para buscar en el menú. Si quieres entrar en
de Peter barbería
la instrucción SELECT se vería
SELECT *
FROM Customers
WHERE Customername = 'Peter''s Barbershop'
Si ahora un atacante podría insertar este:
';DROP TABLE FOO; --
La declaración se vería como:
SELECT *
FROM Customers
WHERE Customername = ''';DROP TABLE FOO;--'
No sería soltar cualquier mesa, sino buscar la customertable para la CustomerName '; DROP TABLE FOO; - la cual, supongo, no se encontrará ;-)
Ahora después de un tiempo de la escritura declaraciones y protegiéndome contra SQL-Injection con este método, leí que muchos desarrolladores usan sentencias parametrizadas, pero nunca leí un artículo donde se usó "nuestro" método. Entonces definitivamente hay una buena razón para eso.
¿Qué escenarios cubrirían los enunciados parametrizados pero nuestro método no? ¿Cuáles son las ventajas de las declaraciones parametrizadas en comparación con nuestro método?
Gracias
Philipp
El ejemplo "No me importa" no funciona para MS SQL Server 2005 y 2008. Aceptan una cadena más larga si hay comillas dobles en ella. Pero +1 y la respuesta aceptada para los primeros 3 puntos. –