SQL Injection tentativa PHP 5.2.6
-
20-08-2019 - |
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?
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.