Aquí encontrarás todo lo relacionado a la tecnología, computación, informática y demás. Enterate de las noticias del momento en cuanto a tecnología se refiere.





Consulta segura en MySQL y PHP


sql_injection

Al momento de desarrollar una aplicación con base de datos, se debe tomar en cuenta la seguridad del mismo, uno de los ataques más comunes es el sql injection que consta básicamente de introducir código sql en cajas de texto de nuestro sistema con el fin de introducirse ó sacar información.

Un ejemplo de sql injection sería el siguiente:

<?php
// Consultar la base de datos para verificar si hay una coincidencia de usuario
$consulta = "SELECT * FROM usuarios WHERE usuario='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($consulta);
//Supongamos que el usuario tecleó ' OR ''=' en el campo de password:
$_POST['username'] = 'admin';
$_POST['password'] = "' OR ''='";

// Esto quiere decir que la consulta enviada a MySQL seria:
echo $consulta;
?>

La variable $consulta contendría:

SELECT * FROM usuarios WHERE usuario='aidan' AND password='' OR ''=''

Esto permitiría a cualquier usuario ingresar al sistema sin password.

Para realizar una consulta segura, utilizaremos 2 funciones mysql_real_escape_string y sprintf, se pudiera resolver también modificando la configuración del php para no permitir caracteres especiales, pero ésto sería una desventaja, ya que no permitiría la portabilidad del código.

<?php
// Conexion
$enlace = mysql_connect('mysql_host', 'mysql_usuario', 'mysql_contraseña')
    OR die(mysql_error());
//Consulta segura
$query = sprintf("SELECT * FROM libros WHERE autor='%s'", mysql_real_escape_string($autor_nombre));

mysql_query($query);
?>

Ojo, si no hay una conexión con el servidor, la función mysql_rea_space_string marcará un error.

En caso de una consulta de logeo:

<?php
// Función para eliminar "/" y añadir comillas
function comillas_inteligentes($valor)
{
// Retirar las barras
    if (get_magic_quotes_gpc()) {
        $valor = stripslashes($valor);
    }

 // Colocar comillas si no es entero
    if (!is_numeric($valor)) {
        $valor = "'" . mysql_real_escape_string($valor) . "'";
    }
    return $valor;
}

// Conexion
$enlace = mysql_connect('mysql_host', 'mysql_usuario', 'mysql_contraseña')
    OR die(mysql_error());

//consulta segura
$consulta = sprintf("SELECT * FROM usuarios WHERE usuario=%s AND password=%s",
            comillas_inteligentes($_POST['username']),
            comillas_inteligentes($_POST['password']));

mysql_query($consulta);
?>

Post Relacionados:


Búsquedas hacia éste artículo:


1 Comentario »

RSS feed para los comentarios de esta entrada. TrackBack URI

  1. Esta mejor ‘or’ :D

    Comentario por Rafael Bucio — May 25, 2009 #

Dejar un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Todos los derechos reservados. Tecnologia.