SQL-Injection-Versuch PHP 5.2.6
-
20-08-2019 - |
Frage
Mit PHP 5.2.6 in XAMPP:
Ich las über SQL-Injektionen hier und versuchte, das mit dem folgende Login-Formular:
<html><body>
<form method='post' action='login.php'>
<input type='text' name='user'/>
<input type='text' name='pass'/>
<input type='submit'/>
</form>
</body></html>
und PHP-Code:
<?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';
?>
Was ich herausgefunden hat war, der $ Pass Variable bereits all entkamen die Sonderzeichen hatte.
So gibt es keine Notwendigkeit, das mysql_
real_
escape_
string in PHP 5.2.6 dann zu benutzen?
Lösung
Es ist wahrscheinlich, dass Ihr PHP-Server konfigurieren, ist zu verwenden Magic Quotes . Eine veraltete Einstellung in PHP, die automatisch alle eingehenden Daten in einem PHP-Skript entkommt. Es ist veraltet und wird in PHP 6. Hier sind Zends Gründe zum Entfernen von Magic Quotes.
Es ist besser, nicht auf ‚Magie‘ zu verlassen, die viele Dinge macht Arbeit, aber bricht andere. Explizit Ihre Eingabe zu entkommen ist zuverlässiger und machen Sie besseren Code entwerfen. Zum Beispiel muss nicht alle Eingaben auf die gleiche Art und Weise maskiert werden.
Andere Tipps
Die Werte können entwertet werden aufgrund Magic Quotes in der Server-Konfiguration aktiviert werden. Magic Quotes sind sehr schlecht betrachtet, im Grunde für den genauen Grund, den Sie erwähnen. Es ist nicht sicher auf ein Feature verlassen, die nicht auf automagically sein können, um Ihre eingehenden Daten zu entkommen. Es ist viel besser, es zu tun, um sie während der Laufzeit.
Für weitere Informationen über Magic Quotes, und warum sie schlecht sind, und wie sie deaktivieren, werfen Sie einen Blick auf einige dieser SO Fragen / Antworten:
Nein, ich glaube nicht, dass Sie sich hier sind. Unabhängig davon, ob magisch php Sonderzeichen in diesem Beispiel entweicht, wird der Dolmetscher nicht gehen auszuführen MySQL spezifische Flucht auf Ihre Anfrage args.
Ich denke, es ist sehr wahrscheinlich, dass es in diesem Code eine Schwachstelle ist.