Buenas a todos, en el post de hoy volvemos a hablar de las inyecciones de código SQL,
en este caso para brindaros algunos trucos para filtrarlas y proteger
vuestros aplicativos en función del lenguaje que utilicéis en vuestros
desarrollos.
En primer lugar hay que tener en cuenta algunos conceptos clave para poder protegernos de este tipo de inyecciones:
- Siempre que sea posible deberemos parametrizar las consultas
- Nunca utilizar en las aplicaciones usuarios con privilegios de administración. Siempre deberán utilizarse usuarios que tengan los permisos mínimos para ejecutar las tareas para las que fue diseñada la aplicación
- Utilizar mensajes de error personalizados, evitando mostrar información del fabricante del software, versión, etc.
- Siempre hay que validar los datos de entrada, independientemente de que su explotación no nos produzca ningún perjuicio, ya que podrían utilizarse de trampolín para atacar a otros sistemas
Aclaradas algunas claves, a continuación
os mostraremos 3 ejemplos para los lenguajes/frameworks más comunmente
utilizados, PHP, J2EE y .Net.
PHP
En el caso de PHP puede ser interesante hacer uso de PHP Data Objects (PDO) y las consultas parametrizadas (bindParam())
A continuación se presenta un ejemplo de
sentencia SQL que devuelve los usuarios de la tabla TablaUsuarios cuyo
valor de la columna Nombre coincide con el texto “Flu”:
$sql= ‘SELECT * FROM TablaUsuarios WHERE Nombre= :name’;
$query= $conn->prepare($sql);
$query->bindParam(‘:name’, ‘Flu’);
$query->execute();
J2EE
De
la misma manera que con el anterior ejemplo en PHP haremos uso de las
consultas parametrizadas, en este caso gracias a “PreparedStatement”.
Ahora recuperaremos los usuarios de la TablaUsuarios cuyo identificador de usuario sea “5″:
ps = c.prepareStatement(“SELECT * FROM TablaUsuarios WHERE idUsuario=?”);
ps.setInt(1, 5);
ResultSet rs = ps.executeQuery();
.NET
Finalmente mostraremos un ejemplo práctico para parametrizar consultas en .Net haciendo uso de “SQLCommand” con “SqlParameter”.
Al igual que en el anterior ejemplo recuperaremos los usuarios de la TablaUsuarios cuyo identificador de usuario sea “5″:
SqlCommand q= new SqlCommand(‘SELECT * FROM TablaUsuarios WHERE idUsuario=@id’, conexion);
SqlParamenter parametro= new SqlParameter();
parametro.ParameterName= ‘@id’;
parametro.Value=5;
q.Paramenters.Add(parametro);
r = q.ExecuteReader();
Eso es todo por hoy, proximamente seguiremos mostrando ejemplos sobre como aplacar este tipo de inyecciones.
Saludos!
Fuente: flu-project
No hay comentarios:
Publicar un comentario