Tips para evitar SQL Injection
En un gran porcentaje, la mayoría de nuestras aplicaciones necesitan acceder a las bases de datos para realizar consultas, actualizaciones e incluso eliminaciones denuestros registros. El problema es cuando alguien desde fuera intenta hacer esas tareas por nosotros ;)
Voy a indicar algunas reglas a la hora de tratar los valores ajenos a nosotros desde el ladodel servidor, para evitar este tipo de catástrofes. Por otro lado, cualquier tip adicional será bienvenido :D
Convierte siempre el valor a su tipo correspondiente
Si estamos esperando un valor de tiponumérico, deberíamos intentar parsear este valor a dicho tipo para asegurarnos de que no incluye texto adicional:
1
2
3
4
5
6
var id = Request.QueryString["id"];
int result;
if(Int32.TryParse(id, out result))
//Do things
Parametrizar las consultas SQL
Un error muy común es hacer uso de los valores que nos llegan sin especificar ningún tipo para el mismo. Algo parecido aesto:
1
2
var id = Request.QueryString["id"];
var query = "SELECT * FROM HOUSES WHERE ID=" + id;
Para evitarlo, podemos parametrizar las sentencias SQL y poder especificar de esta manera el tipoque estamos esperando para cada parámetro.
1
2
3
4
5
6
7
8
9
10
11
var objConnection = new OleDbConnection(strDbConnectionString);
objConnection.Open();
const string query = "SELECT* FROM HOUSES WHERE ID=?";
var objCommand = new OleDbCommand(query, objConnection);
var id = new OleDbParameter("@idParam", OleDbType.Integer) { Value = id};
objCommand.Parameters.Add(id);
var objReader = objCommand.ExecuteReader();;
Usar una cuenta con permisos restringidos a la base de datos
Otro dato importante a tener muy en cuenta es asegurarnos de que la cuenta de usuarioutilizada por nuestra aplicación tiene los permisos necesarios para poder acceder y/o modificar unos datos concretos pero también que sea lo suficiente restrictiva para no alterar otro tipo de datos....
Regístrate para leer el documento completo.