Pergunta

Usando PHP 5.2.6 no XAMPP:
Eu li sobre sql injeções aqui e tentou que, com o formulário de login seguinte:

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

e 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';
?>

O que eu descobri foi, a variável $ passagem já tinha todos os caracteres especiais escapou. Assim, não há necessidade de usar o mysql_real_escape_string no PHP 5.2.6, então?

Foi útil?

Solução

É provável que o seu servidor de PHP é configure para usar Magic Quotes . A definição obsoleta no PHP que escapa automaticamente todos os dados de entrada em um script PHP. É obsoleto e será removido em PHP 6. Aqui estão as razões de Zend para remover Magic Quotes.

É melhor não confiar na 'magia' que faz muitas coisas de trabalho, mas quebras outros. Explicitamente correria na sua entrada é mais confiável e faz você projetar um código melhor. Por exemplo, nem todos de entrada precisa ser escapado da mesma forma.

Outras dicas

Os valores podem ser escapou devido a Magic Quotes ser habilitado na configuração do seu servidor. Magic Quotes é considerada muito ruim, basicamente, para a razão exata que você menciona. Não é seguro confiar em um recurso que pode ou não ser sobre a automagicamente escapar de seus dados de entrada. É muito melhor para fazê-lo sozinho em tempo de execução.

Para mais informações sobre Magic Quotes, e por que eles são ruins, e como desativá-los, dar uma olhada em algumas dessas perguntas SO / respostas:

Não, eu não acho que você está bem aqui. Seja ou não php magicamente escapa caracteres especiais neste exemplo, o intérprete não está indo para executar mysql específica escapar em seus argumentos de consulta.

Eu acho que é extremamente provável que haja uma vulnerabilidade neste código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top