mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 11.10.2008 06:17 Benutzername: Passwort: Auto-Login

Thema: SQL-Injektion | Login sicher ? vom 03.02.2008

Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> SQL-Injektion | Login sicher ?
Autor Nachricht
Snifferdog
Threadersteller

Dabei seit: 08.03.2007
Ort: Wuppertal
Alter: 19
Geschlecht: Männlich
Verfasst So 03.02.2008 16:32
Titel

SQL-Injektion | Login sicher ?

Antworten mit Zitat Zum Seitenanfang

Hey zusammen,

ich habe mein CMS nun endlich fertig gestellt und möchte bevor ich es abliefere nochmal sicher gehen, dass
ich keine großen Sicherheitslücken im Loginscript habe.

Wäre jemand so freundlich und würde sich das eben kurz anschaun und mir sagen, ob es Lücken gibt bzw. wie
ich diese schließen kann?

Mein Loginscript läuft so:
(Unwichtiges Zeug hab ich rausgeschmissen)

Code:

[i]Quellcode Index.php[/i]

<form action='login.php' method='POST'>
<input type='text' name='username' size='20' maxlength='20' />
<input type='password' name='passwort' size='20' maxlength='10' />
<input type='submit' name='absenden' value='Einloggen' />
</form>


Code:

[i]Quellcode login.php[/i]

<?php

$error      = "";
include 'connect.php';
include 'errors.php';

if((!isset($_POST['username'])) OR ($_POST['username'] == "") OR (!isset($_POST['passwort'])) OR ($_POST['passwort'] == "")){
    $error      = "1";     //  = Nicht alle Felder wurden ausgefüllt.
}

if($error   == ""){
    $username   = mysql_escape_string($_POST['username']);
    $passwort   = mysql_escape_string($_POST['passwort']);

    $sql        = "SELECT * FROM ".$tblname."_user WHERE name = '".$username."'";
    $result     = mysql_query($sql) OR die(mysql_error());
    $row        = mysql_fetch_array($result);

    if($row['id']   == ""){
        $error          = "2"; // = Dieser Username existiert nicht.
    }
}

if($error == ""){
     if($row['passwort'] != $passwort){
     $error = "3"; // = Das Passwort stimmt nicht.
     }
}


if($error == ""){

    header("Location:layout.php");
    exit;
}

header('Location:index.php?error='.$error);

?>



Der Login läuft weiter über Session - die dann bei jeder Seite überprüft wird.

Mein Gedanke dazu war, dass ich Passwort und Nickname nicht in einen Query gepackt habe
um Injektion im Typ von "OR 1=1" zu vermeiden .....
aber ich kenn mich in dem Bereich kaum aus.

Bin für jeden Tipp dankbar.
Gruß
  View user's profile Private Nachricht senden
pRiMUS

Dabei seit: 09.09.2003
Ort: Nemmberch
Alter: 33
Geschlecht: Männlich
Verfasst So 03.02.2008 18:38
Titel

Antworten mit Zitat Zum Seitenanfang

die frage die ich mir stelle, wieso belastest du die datenbank mit einem ergebnis, obwohl das evtl gar nicht notwendig ist.

Code:

select id from user where name = 'name' and passwort = 'passwort';


wenns ein false oder eben keinen recordset zurückgibt gibts halt keinen entsprechenden eintrag.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
m

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst So 03.02.2008 19:42
Titel

Antworten mit Zitat Zum Seitenanfang

Zudem ist mysql_escape_string veraltet und du solltest mysql_real_escape_string verwenden.
  View user's profile Private Nachricht senden
Snifferdog
Threadersteller

Dabei seit: 08.03.2007
Ort: Wuppertal
Alter: 19
Geschlecht: Männlich
Verfasst So 03.02.2008 20:01
Titel

Antworten mit Zitat Zum Seitenanfang

pRiMUS hat geschrieben:
die frage die ich mir stelle, wieso belastest du die datenbank mit einem ergebnis, obwohl das evtl gar nicht notwendig ist.

Code:

select id from user where name = 'name' and passwort = 'passwort';


wenns ein false oder eben keinen recordset zurückgibt gibts halt keinen entsprechenden eintrag.


Naja mein Gedanke war eben, oben genannte Injektion so zu verhindern .. außerdem lässt sich ja so nicht mehr unterscheiden ob der Name nicht existiert oder nur das Passwort falsch ist.

mysql_escape_string hab ich schonmal geändert Lächel
  View user's profile Private Nachricht senden
dastef

Dabei seit: 03.11.2003
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst So 03.02.2008 21:35
Titel

Antworten mit Zitat Zum Seitenanfang

Snifferdog hat geschrieben:
Naja mein Gedanke war eben, oben genannte Injektion so zu verhindern .. außerdem lässt sich ja so nicht mehr unterscheiden ob der Name nicht existiert oder nur das Passwort falsch ist.


Als ob das ne Rolle spielt .. so ne Info würde ich nem User sicher
nicht auf die Nase binden - du hast dein display-error's ja sicher
auch nicht auf "On", oder?
  View user's profile Private Nachricht senden E-Mail senden
Snifferdog
Threadersteller

Dabei seit: 08.03.2007
Ort: Wuppertal
Alter: 19
Geschlecht: Männlich
Verfasst So 03.02.2008 23:48
Titel

Antworten mit Zitat Zum Seitenanfang

dastef hat geschrieben:
Snifferdog hat geschrieben:
Naja mein Gedanke war eben, oben genannte Injektion so zu verhindern .. außerdem lässt sich ja so nicht mehr unterscheiden ob der Name nicht existiert oder nur das Passwort falsch ist.


Als ob das ne Rolle spielt .. so ne Info würde ich nem User sicher
nicht auf die Nase binden - du hast dein display-error's ja sicher
auch nicht auf "On", oder?


Mh ja ... klingt logisch ... ^^
  View user's profile Private Nachricht senden
 
Ähnliche Themen [SQL] Wie 6 Ergebnisse anzeigen ohne ID / andere SQL-Fragen
Login über DB funktioniert nicht...
login funktioniert im FF aber im IE nicht?
Login Script
[php] Login
login Datei
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.