PHP-Injection, gibt es sowas?
Heinz
- php
0 Götz2 Sven Rautenberg1 Tobias Kloth0 Chris
0 Heinz
Guten Tag,
ich habe gelesen, dass man unter Umständen mittels einer SQL-Injection z.B. einen Passwort-Schutz umgehen kann. Ich habe dies ausprobiert und es ist wie erwartet so wie beschrieben möglich.
Nun sieht mein Schutz so aus, dass der User per SQL-Befehl ausgewählt wird, die Passwort-Überprüfung aber durch eine if-Abfrage im PHP-Script erfolgt:
if ($_POST["passwort"]==$db_ergebnis["passwort"]) [...]
Nun frage ich mich, ob man auch eine PHP-Injection durchführen kann. Ich habe es mit der Eingabe von:
""=="" || ""
ausprobiert. Es funktionierte nicht. Ist also eine PHP-Injection nicht möglich und mein Zugangsschutz sicher?
Danke für eure Antworten.
Heinz
Hallo Heinz,
ich habe gelesen, dass man unter Umständen mittels einer SQL-Injection [...]
Man sollte nie, wirklich nie, Benutzereingaben direkt in ein SQL-Statement einbauen. Schau Dir mal mysql_real_escape_string() und dclp FAQ: 16.18. Wie kann ich bösartigen Code in SQL-Abfragen unterbinden? an.
if ($_POST["passwort"]==$db_ergebnis["passwort"]) [...]
Nun frage ich mich, ob man auch eine PHP-Injection durchführen kann. Ich habe es mit der Eingabe von:
""=="" || ""
ausprobiert. Es funktionierte nicht. Ist also eine PHP-Injection nicht möglich und mein Zugangsschutz sicher?
Du kannst auf jeden Fall das übergebene Paßwort mal prüfen, also wenn Deine Paßworte z.B. eine bestimmte Zeichenlänge haben oder nur bestimmte Zeichen enthalten dürfen, dann kannst Du damit schonmal abfangen.
MfG
Götz
Moin!
ich habe gelesen, dass man unter Umständen mittels einer SQL-Injection z.B. einen Passwort-Schutz umgehen kann. Ich habe dies ausprobiert und es ist wie erwartet so wie beschrieben möglich.
Was nicht beschrieben war, war offensichtlich, wie man etwas dagegen unternehmen kann.
Gibts deinen Testcode noch? Dann solltest du sämtliche Variablen, die in den SQL-String eingebaut werden, mal vorher durch die Funktion mysql_real_escape() jagen - damit wird SQL-Injection wirkungsvoll verhindert.
$sql = "SELECT whatever FROM tabelle WHERE username='".mysql_real_escape($username)."' AND password ='".mysql_real_escape($passwort)."'";
Die Funktion mysql_real_escape() oder auch mysql_escape() bewirkt, dass alle "schädlichen" Zeichen in einem String entschärft werden.
Nun frage ich mich, ob man auch eine PHP-Injection durchführen kann. Ich habe es mit der Eingabe von:
""=="" || ""
ausprobiert. Es funktionierte nicht. Ist also eine PHP-Injection nicht möglich und mein Zugangsschutz sicher?
Auch PHP-Code-Injections sind absolut möglich, sie werden allerdings komplett anders realisiert. Angriffpunkte dabei sind entweder Funktionsaufrufe von eval() mit variablem Code, oder ungeschützte include() oder require()-Anweisungen mit variablem Pfad.
Das bedeutet für deinen Fall, dass du dich an dieser Stelle nicht vor PHP-Codeinjections fürchten mußt, dafür aber möglicherweise an anderen Stellen, und mit anderen Auswirkungen.
- Sven Rautenberg
Hallo Sven,
Die Funktion mysql_real_escape() oder auch mysql_escape() bewirkt, [...]
Die Funktionen heißen mysql_real_escape_string() und mysql_escape_string() (wobei letztere nicht mehr verwendet werden sollte).
Grüße aus Nürnberg
Tobias
Hallo,
Die Funktion mysql_real_escape() oder auch mysql_escape() bewirkt, [...]
Die Funktionen heißen mysql_real_escape_string() und mysql_escape_string() (wobei letztere nicht mehr verwendet werden sollte).
... und man sollte vorher sicherstellen, dass die Zeichenketten unmaskiert vorliegen, also nicht schon PHP Maskierungen (Backslashes) hinzugefügt worden sind. Die sollte man dann nämlich erst wieder entfernen oder aber den Automatismus ausschalten.
Dein Start-Link:
http://de.php.net/manual/en/function.get-magic-quotes-gpc.php
Anderenfalls landen die PHP-Maskierungen in der DB, was dann später beim Suchen und Sortieren enormes Durcheinander bringt.
LG
Chris
Guten Abend,
danke für eure Antworten! Nun bin ich im Bilde...
Heinz