Hola bogal,
Para evitar sql Injection, en lugar de validar todos los campos, te conviene
tomar como regla no usar el contenido ingresado por el usuario para armar
sentencias sql. Esto no significa que no puedas armar sentencias
dinamicamente. Si queres usar sentencias dinamicas podes hacerlo
parametrizandolas asi:
SELECT * FROM Tabla WHERE Campo1 = @Param1 AND Campo2 = @param2
Luego asignas los valores a utilizar en cada parametro (?) con
cmd.Parameters.AddWithValue("@Param1", txtPAram1.Text);
De esta manera, ademas de estar mas seguro, mejoras la performance porque el
motor puede cachear la compilacion de la sentencia ya que no varia de una
ejecución a otra, solo varian los parametros. Cada vez que ejecutas una
sentencia sql el motor recibe un texto que primero compila y luego ejecuta.
Si el texto es el mismo de una ejecución anterior se evita compilarlo
nuevamente.
El @ para sql server, en otros casos va un signo de pregunta para definir un
parametro Campo1 = ?. Esto varia de un motor a otro
Otra ventaja adicional que obtenes de esta manera es que podes evitar que el
motor haga conversiones de tipos, que suele ser una fuente de errores. Por
ejemplo, si tenes tu apliacion configurada para funcionar todo en castellano
y tu base usuario de base de datos esta en ingles, si le pasas el texto de
una fecha al motor te la puede tomar al reves. Trabajando de esta manera
podes, en lugar de pasarle un texto de una fecha, le podes pasar un DAteTime
cmd.Parameters.AddWithValue("@Param1", DateTime.Parse(txtPAram1.Text));
Asi al hacer las conversiones de tipo solo en tu aplicacion podes evitar
errores
y sino directamente usa procedimientos almacenados
--
Saludos
Marcos Mellibovsky
MCT MCTS MCSD.NET MCDBA MCSE...
Cordoba Argentina
Post by bogalHola
Me gustaría saber formas de evitar ataques com inyección sql mediante
validación de datos. Que no deje entrar datos como '<','drop'...
¿Alguna función o expresión regular o fórmula habrá para hacerme una idea?
Gracias de antemano