SQL-Injection möglich oder nicht?

Dörti.Hermi

Erfahrenes Mitglied
Hallo Leute,

hab mal ne Frage bzgl. SQL-Injections:
Ist es bei diesem Skript möglich, sich per SQL-Injection "einzuloggen"?
PHP:
$username = $_POST['username'];
$passwort = md5 ($_POST['passwort']);

$sql = "select * from login";
$res = mysql_query($sqlab);

$dbpw = mysql_result($res, 0, "kennwort");
$dbn = mysql_result($res, 0, "user");

if(($dbn == $username) && ($dbpw == $passwort))
{
   //Eingeloggt
} else {
   //Nicht Eingeloggt
}

In der DB ist nur 1 User vorhanden.

Danke, Lg Andi
 
SQL Injektionen sind nur möglich, wenn ungefilterte Daten an die Datenbank übergeben werden.

Du übergibst gar keine Daten, von daher ist dein Query (also "SELECT * FROM login") auch nicht injektionsgefährdet.
 
Ave!

Wie man schon sagte, ist hier keine Möglichkeit gegeben eine SQL-Injection vorzunehmen.
Ich möchte aber dennoch empfehlen, wenn auch weiterhin programmiert werden soll, sich PDO anzusehen.

Hier ist, durch vorgefertigte Abfragen, auch keine SQL-Injection möglich.

Soll kein PDO verwendet werden, mysql_escape_string() ist auch etwas Feines, was man auf jede Nutzereingabe von Aussen loslassen sollte.

Grüße
JCB
 
Ich finde PDO ehrlich gesagt überflüssig, bei Projekten, die 100%ig bei MySQL bleiben werden.

Und Parameter Binding findet man auch bei MySQLi z. B.
 
SQL Injektion ist nur bei msSQL möglich.
Dort kann man soweit ich weiß, mehrere Statements auf einmal abschicken. Das ist bei MySQL ja nicht möglich.
Folglich brauch man ja auch keine Filterung der Eingaben. Sowas hier:
Code:
select user; select * from user; --  from user;
Führt ja sofort zu einem Error.
 
Es geht aber eher um solche Dinge...

PHP:
$sql = "SELECT * FROM `table` WHERE ´username` = '$foo' AND `passwort` = '$bar'";
$res = mysql_num_rows(mysql_query($sql));

if($res > 0)
{
  // eingeloggt
}

Wenn du dort jetzt z. B. bei $foo folgendes injizierst:


Dann würde das Query nach der Namensprüfung abbrechen und das Resultat wäre 1. Obwohl kein Passwort eingegeben wurde.
 
Zuletzt bearbeitet:
SQL-Injektionen beziehen sich nicht nur auf das Ausführen mehrere Anweisungen sondern allgemein um das Einschleusen von Schadcode. Und der kann viele Formen annehmen und dadurch auch unterschiedliche Auswirkungen haben.
 
Es geht aber eher um solche Dinge...

PHP:
$sql = "SELECT * FROM `table` WHERE ´username` = '$foo' AND `passwort` = '$bar'";
$res = mysql_num_rows(mysql_query($sql));

if($res > 0)
{
  // eingeloggt
}

Wenn du dort jetzt z. B. bei $foo folgendes injizierst:

Dann würde das Query nach der Namensprüfung abbrechen und das Resultat wäre 1. Obwohl kein Passwort eingegeben wurde.
Ich hab das mal in meinem Login-System getestet, und es geht nicht. Das löst nur "Falsche Zugangsdaten" aus.
 
Zurück