Saltar al contenido




Seguridad contra la inyección de SQL

Leyendo el blog Buayacorp y sabiendo que cualquier filtro genérico es peligroso voy a comentar algunas de las técnicas que utilizo para evitar ataques de inyección de SQL.

Antes de todo, dos cosas muy importantes. Primero si queremos evitar cualquier ataque hay que tener muy claro que vamos a hacer con nuestros datos. Y segundo este artículo habla de los ataques de inyección de SQL, hay otros tipos de ataques que no se evitan con las funciones que aquí uso.

No voy a dar muchas explicaciones lo que si te recomiendo es que pruebes el código y lo adaptes a tus necesidades.

SELECT

Para ejecutar una orden de SQL que me devuelva un registro procuro usar siempre valores de tipo integer y al generarla realizo una conversión a ese tipo con dato recibido desde $_GET o $_POST.

$txtSql = "SELECT * FROM marcas WHERE (tipo=" . (int)$txtTipoMC . ") ORDER BY titulo";

En el borrado de un registro concreto lo mismo.

$txtSql = "DELETE FROM marcas WHERE (id_marcas='" . (int)$txtIdRegistro . "')";

UPDATE e INSERT

Con los UPDATE e INSERT el proceso es un poco más complejo y para ello uso una pequeña función (sacada de Buayacorp, leer el interesante artículo donde está para entender porque estas funciones no valen para todo):

function limpiar_sql($value){
$value = trim(htmlentities($value)); // Evita introducción código HTML
if (get_magic_quotes_gpc()) $value = stripslashes($value);
$value = mysql_real_escape_string($value);
return $value;
}

Si queremos permitir que el dato incluya HTML hay que desactivar o crear otra función sin la primera línea (htmlentities).

La combino con sprintf para generar la orden SQL. Un par de ejemplos:

$txtSql = sprintf("UPDATE marcas SET titulo='%s' WHERE id_marcas=%d", limpiar_sql($txtTitulo), (int)$txtIdRegistro);

$txtSql = sprintf("INSERT INTO marcas (titulo, tipo) VALUES ('%s', %d)", limpiar_sql($txtTitulo), (int)$txtTipo);

Probar, modificar y adaptar a cada necesidad.

Enlaces recomendados

Buayacorop, blog de seguridad.

Manual de PHP aquí, en algunas funciones, encontrarás información sobre seguridad con ejemplos.

La Wikipedia un buen punto de partida.




© innovacionweb.com | Algunos derechos reservados. Licencia Creative commons
Saber y conocer