Tentative d’injection SQL 5.2.6
-
20-08-2019 - |
Question
Utilisation de PHP 5.2.6 dans XAMPP:
J'ai lu des injections sql ici et je l'ai essayé avec le formulaire de connexion suivant:
<html><body>
<form method='post' action='login.php'>
<input type='text' name='user'/>
<input type='text' name='pass'/>
<input type='submit'/>
</form>
</body></html>
et le code 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';
?>
Ce que j’ai découvert, c’est que la variable $ pass avait déjà échappé tous les caractères spéciaux.
Donc, n’est-il pas nécessaire d’utiliser la chaîne mysql _
réelle <=> échappée <=> en PHP 5.2.6, alors?
La solution
Il est probable que votre serveur PHP est configuré pour utiliser les Citations magiques . Un paramètre obsolète en PHP qui échappe automatiquement toutes les données entrantes dans un script PHP. Il est obsolète et sera supprimé en PHP 6. Voici les raisons de Zend pour supprimer Magic Quotes.
Il vaut mieux ne pas compter sur la "magie" qui fait fonctionner beaucoup de choses mais en brise d'autres. Échapper explicitement à votre entrée est plus fiable et vous permet de concevoir un meilleur code. Par exemple, toutes les entrées ne doivent pas nécessairement être échappées de la même manière.
Autres conseils
Les valeurs peuvent être ignorées car Magic Quotes est activé dans la configuration de votre serveur. Les citations magiques sont considérées comme très mauvaises, essentiellement pour la raison exacte que vous mentionnez. Il n’est pas prudent de s’appuyer sur une fonctionnalité qui risque d’échapper ou non à vos données entrantes. Il est beaucoup préférable de le faire vous-même au moment de l'exécution.
Pour plus d'informations sur les guillemets Magic, sur leur signification et sur leur désactivation, jetez un coup d'œil à quelques-unes de ces questions / réponses SO:
Non, je ne pense pas que vous soyez ici. Que php échappe ou non par magie à des caractères spéciaux dans cet exemple, l'interpréteur n'effectuera pas l'échappement spécifique à mysql sur vos arguments de requête.
Je pense qu'il est extrêmement probable qu'il existe une vulnérabilité dans ce code.