Pregunta

Usando PHP 5.2.6 en XAMPP:
Leí sobre las inyecciones sql aquí y probé eso con el siguiente formulario de inicio de sesión:

<html><body>
        <form method='post' action='login.php'>
            <input type='text' name='user'/>
            <input type='text' name='pass'/>
            <input type='submit'/>
        </form>
</body></html>

y código php:

<?php
$user = $_POST['user'];
$pass = $_POST['pass'];
$query = "Select * from users where user='$user' AND pass='$pass'";
echo $query;
mysql_connect('localhost','root','');
mysql_select_db('test');
$res = mysql_query($query);
if($res) $row = mysql_fetch_assoc($res);
if($row) echo 'yes';
?>

Lo que descubrí fue que la variable $ pass ya tenía todos los caracteres especiales escapados. Entonces, ¿no es necesario usar la cadena mysql _ real <=> escape <=> en PHP 5.2.6 entonces?

¿Fue útil?

Solución

Es probable que su servidor PHP esté configurado para usar Magic Quotes . Una configuración obsoleta en PHP que escapa automáticamente a todos los datos entrantes en un script PHP. Está en desuso y se eliminará en PHP 6. Estas son las razones de Zend para eliminar las comillas mágicas.

Es mejor no confiar en la "magia" que hace que muchas cosas funcionen pero que rompa otras. El escape explícito de su entrada es más confiable y le hace diseñar un mejor código. Por ejemplo, no todas las entradas deben escaparse de la misma manera.

Otros consejos

Los valores pueden escaparse debido a que Magic Quotes está habilitado en la configuración de su servidor. Las citas mágicas se consideran muy malas, básicamente por la razón exacta que mencionas. No es seguro confiar en una función que puede estar activada o no para escapar automáticamente de sus datos entrantes. Es mucho mejor hacerlo usted mismo en tiempo de ejecución.

Para obtener más información sobre las citas de Magic, y por qué son malas, y cómo deshabilitarlas, eche un vistazo a algunas de estas preguntas / respuestas SO:

No, no creo que estés aquí. Independientemente de si php escapa mágicamente o no de caracteres especiales en este ejemplo, el intérprete no realizará escapes específicos de mysql en sus argumentos de consulta.

Creo que es extremadamente probable que haya una vulnerabilidad en este código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top