He estado predicando a mis colegas y aquí en SO sobre la bondad de usar parámetros en consultas SQL, especialmente en aplicaciones .NET. Incluso he ido tan lejos como para prometerles que darían inmunidad contra los ataques de inyección SQL.
Pero empiezo a preguntarme si esto realmente es cierto. ¿Existe algún ataque de inyección SQL conocido que tenga éxito contra una consulta parametrizada? ¿Puede, por ejemplo, enviar una cadena que provoque un desbordamiento del búfer en el servidor?
Por supuesto, hay otras consideraciones que hacer para garantizar que una aplicación web sea segura (como desinfectar la entrada del usuario y todo eso), pero ahora estoy pensando en inyecciones de SQL. Estoy especialmente interesado en los ataques contra MsSQL 2005 y 2008 ya que son mis bases de datos principales, pero todas las bases de datos son interesantes.
Editar: Para aclarar lo que quiero decir con parámetros y consultas parametrizadas. Al usar parámetros me refiero al uso de "variables" en lugar de construir la consulta sql en una cadena.
Entonces, en lugar de hacer esto:
SELECT * FROM Table WHERE Name = 'a name'
Nosotros hacemos esto:
SELECT * FROM Table WHERE Name = @Name
y luego establezca el valor del parámetro @Name en el objeto de consulta / comando.