11.09.2018 Views

Aprender a desarrollar un sitio Web con PHP y MySQL

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Inyección SQL (addslashes)<br />

La inyección SQL tiene como objetivo inyectar <strong>un</strong> código SQL que ha escrito <strong>un</strong> usuario malicioso. Este<br />

código permite iniciar la sesión sin <strong>con</strong>ocer necesariamente la <strong>con</strong>traseña, mostrar todas las <strong>con</strong>traseñas<br />

e incluso destruir la tabla por completo.<br />

En el siguiente ejemplo, la directiva Magic quotes está en Off.<br />

El usuario utiliza <strong>un</strong> formulario que le solicita <strong>un</strong> identificador y <strong>un</strong>a <strong>con</strong>traseña. Cuando hace clic en<br />

validar, puede comprobar que la persona tiene <strong>un</strong> identificador y <strong>un</strong>a <strong>con</strong>traseña correcta <strong>con</strong> <strong>un</strong>a<br />

<strong>con</strong>sulta de tipo:<br />

<br />

Si la <strong>con</strong>sulta devuelve <strong>un</strong>a fila, significa que la persona existe en la base de datos y que, por tanto, la<br />

puede <strong>con</strong>ectar.<br />

Si el usuario des<strong>con</strong>oce el identificador y la <strong>con</strong>traseña, pero introduce en el campo del identificador<br />

’pepe’ y en el campo de la <strong>con</strong>traseña:<br />

’ OR 1=1 OR ’<br />

La <strong>con</strong>sulta SQL se <strong>con</strong>vierte en:<br />

$sql = "SELECT * FROM Persona WHERE login=’pepe’ and password=’’<br />

OR 1=1 OR ’’";<br />

El código OR 1=1 es correcto; entonces la <strong>con</strong>sulta devuelve todos los registros de la tabla Persona. Así<br />

puede pensar que la persona existe realmente en la base de datos.<br />

Si quiere evitarlo, añada la f<strong>un</strong>ción addslashes() cuando recupere los datos <strong>con</strong> POST, y no <strong>con</strong> GET.<br />

Esta f<strong>un</strong>ción agrega el carácter \ (barra invertida) delante de ’ (apóstrofos), " (comillas), \ (barra<br />

invertida) y NULL.<br />

El código queda protegido y se <strong>con</strong>vierte en:<br />

<br />

De este modo, la <strong>con</strong>sulta SQL se <strong>con</strong>vierte en:<br />

SELECT * FROM Persona WHERE login=’ pepe’ and password = ’\’ OR 1=1 OR \"<br />

El código OR 1=1 se interpreta como <strong>un</strong>a cadena de caracteres; por lo tanto, ya no se ejecuta.<br />

Este método no es seguro al cien por cien, porque en alg<strong>un</strong>as <strong>con</strong>sultas se puede eludir esta protección.<br />

www.FreeLibros.me

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!