La inyección SQL tiene como objetivo inyectar un código SQL que ha escrito un usuario malicioso. Este código permite iniciar la sesión sin conocer necesariamente la contraseña, mostrar todas las contraseñas e incluso destruir la tabla por completo.
En el siguiente ejemplo, la directiva Magic quotes está en Off.
El usuario utiliza un formulario que le solicita un identificador y una contraseña. Cuando hace clic en validar, puede comprobar que la persona tiene un identificador y una contraseña correcta con una consulta de tipo:
<?php
$login = $_POST[’login’];
$password = $_POST[’contraseña’];
$sql = "SELECT * FROM Persona WHERE login=’".$login."’
and password=’".$password."’";
?>
Si la consulta devuelve una fila, significa que la persona existe en la base de datos y que, por tanto, la puede conectar.
Si el usuario desconoce el identificador y la contraseña, pero introduce en el campo del identificador ’pepe’ y en el campo de la contraseña:
’ OR 1=1 OR ’
La consulta SQL se convierte en:
$sql = "SELECT * FROM Persona WHERE login=’pepe’ and password=’’
OR 1=1 OR ’’";
El código OR 1=1 es correcto; entonces la consulta devuelve todos los registros de la tabla Persona. Así puede pensar que la persona existe realmente en la base de datos.
Si quiere evitarlo, añada la función addslashes() cuando recupere los datos con POST, y no con GET. Esta función agrega el carácter \ (barra invertida) delante de ’ (apóstrofos), " (comillas), \ (barra invertida) y NULL.
El código queda protegido y se convierte en:
<?php
$login = addslashes($_POST[’login’]);
$password = addslashes($_POST[’contraseña’]);
$sql = "SELECT * FROM Persona WHERE login=’".$login."’
and password=’".$password."’";
?>
De este modo, la consulta SQL se convierte en:
SELECT * FROM Persona WHERE login=’ pepe’ and password = ’\’ OR 1=1 OR \"
El código OR 1=1 se interpreta como una cadena de caracteres; por lo tanto, ya no se ejecuta.
Este método no es seguro al cien por cien, porque en algunas consultas se puede eludir esta protección.
Para estar totalmente seguro, se recomienda utilizar las consultas que se han explicado en capítulos anteriores.
Espero haber ayudado en algo. Hasta la próxima oportunidad!
Twittear
No hay comentarios:
Publicar un comentario