• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SQL Injection - Wodurch?

Status
Für weitere Antworten geschlossen.

Sn0opy

Neues Mitglied
Hiho, ich bin momentan etwas überfragt. Ich nem Kumpel eine Loginpage gemacht. Die Daten, wie z.B. das Passwort und der Username werden mit der Datenbank überprüft und nur sobald ein Ergebnis rauskommt, wird der entsprechende Content angezeigt.

Hier ist ein kleienr Auszug, der eigentlich reichen sollte:
PHP:
$query = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");
if(mysql_num_rows($query) == 1) {
	#Hier wird dann z.B. nen Text angezeigt
}

Trotzdem ist es zustande gekommen, dass jemand wohl eine MySQL Injection durchgeführt haben muss und somit diverse Accounts geändert hat. Passwörter können mit ziemlicher Sicherheit nicht geknackt worden sein, da auch keine weiteren Zugriffe irgendwoanders auf der Seite festgestellt wurden.

Hab ich irgendeinen Fehler im Code gemacht?
 
Hi,

bitte poste mal den Sourcecode Abschnitt in dem Du die Variablen setzt so in der Art ...

PHP:
// Just an example
$username = $_POST['username'];

Aber bitte von dort an, alles bis zur SQL Abfrage.

Gruß Sven
 
Passwörter können mit ziemlicher Sicherheit nicht geknackt worden sein, da auch keine weiteren Zugriffe irgendwoanders auf der Seite festgestellt wurden.


USING, JOIN :)
 
Stell dir das so vor, du hast es in dieser Art:

PHP:
$password = $_POST['password'];
$user = $_POST['user'];
...
WHERE `password` = '".$password."' AND `user` = '".$user."'
...
Die SQL-Injection wäre jetzt, wenn der Angreifer als Passwort und User etwas wie:
Code:
passwort: ' OR '123' = '123
user    : ' OR '123' = '123
eingeben würde, dann käme nämlich das 'raus:

PHP:
...
WHERE `password` = '' OR '123' = '123' AND `user` = '' OR '123' = '123'
...
Und da bei der logische OR-Verknüpfung nur einer der beiden Ausdrücke 'true' ergeben muss, würde die Abfrage aufgehen, dagegen musst du dich schützen, bspw. mit mysql_real_escape_string($user); o.ä.
 
Ah, ok, hatte nen kleinen Denkfehler. Es ist logischerweise doch möglich das ganze so zu regeln. Danke @ m0sT.

@ boehseronkel: Ganz normal mit $_POST. Aber wie gesagt, cih denke m0st hats so weit erklärt. War einfach ein Denkfehler von mir.

PHP:
# Normales Formular mit 2 inputs. 
# (eines als type="password" die action="login.php" 
# -> Formular und Auswertung finden in einer Datei statt.

if(isset($_POST['submitbtn'])) {
	$username = $_POST['username'];
	$password = $_POST['password'];
	$query = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");
			if(mysql_num_rows($query) == 1) {
				#Code...
			}

Ich denke mal, dass es dann an meinem Denkfehler lag, den m0st ja eben augedeckt hat...
 
Jap, das ist ein typischer Fehler, den viele machen.

Immer [phpnet]mysql_real_escape_string[/phpnet] benutzen!
 
Jo, ich werd mich da mal genauer einlesen und sollte das Problem ja wohl gelöst sein :D

Ehm, hat jemand E-Books, oder weitere Infos, um möglichst SQL Injections zu vermeiden? Gibt ja immerhin nicht nur die Möglichkeit, über Input-Felder, den eigenen SQL Code einzuschleusen.
 
geh in die bücherei und leih dir das buch aus `?
Wenn ich das vorgehabt hätte, hätte ich das schon längst getan. Ist zwar nett, dass du mir Bücher ans Herz legen willst, aber ich frage mich, wieso du nun schon das 2. mal damit kommst, wenn ich doch was ganz anderes suche. Schulich wäre das nun Thema verfehlt - 6...
 
du erwartest das ein kostenloses tutorial den selben wert hat wie ein buch von geprüften php entwicklern?

grundschule != berufschule

du brauchst mich auch nicht so doof anzumachen, wenn du nunmal nicht nachdenkst, muss man auch ab und zu ein 2. mal jemanden einen stubs in die richtige richtung geben :mrgreen:

bücherei ist übrigends kostenlos.



edit,
nebenbei bin ich kein schüler mehr ;)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben