Sicheres PHP

Fragen zum Thema HTML, JavaScript, PHP
Benutzeravatar
Dubbel
Beiträge: 197
Registriert: So Jul 06, 2008 6:25 pm
Wohnort: Kopenhagen
Kontaktdaten:

Re: Sicheres PHP

Beitrag von Dubbel » Di Mär 10, 2009 9:22 pm

2 Sachen hätte ich anzumerken:
1. Wie sieht die Loginprep() aus? Da sollte auf jeden Fall mysql_real_escape_string() drin vorkommen
2. Warum gibt diese Funktion 0 (false) zurück, wenn der User eingeloggt ist? Wäre 1 (true) nicht logischer? Hat aber nix mit Sicherheit zutun...

Sonst sieht das ganz okay aus...soweit ich weiß kann der User Sessions, die ja auf dem Server lagern, nicht selber erstellen...müsste also (relativ) sicher sein...

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: Sicheres PHP

Beitrag von Jside » Di Mär 10, 2009 9:38 pm

Dubbel hat geschrieben: 1. Wie sieht die Loginprep() aus? Da sollte auf jeden Fall mysql_real_escape_string() drin vorkommen
Nein, es kommen keine (Variablen)Daten in Berührung mit der Datenbank, also müsste hier mysql_real_escape_string() nicht vorkommen oder?

Code: Alles auswählen

    function Loginprep($Name,$Password) {
        if(!$connection = mysql_connect("localhost","XXX","XXX")) echo "<p class=\"mal\">Error while connecting to the Database<p>";
        else if(!mysql_select_db("XXX"))  echo "<p class=\"mal\">Error the Database does not exists<p>";
        else if(!$result = mysql_query("SELECT * FROM XXX"))  echo "<p class=\"mal\">Error cannot access data<p>";
        while($cah = mysql_fetch_object($result)){
            if($cah->name == $Name) {
                if($cah->password == md5($Password)) {
                    $_SESSION['username'] = $Name;
                    $_SESSION['password'] = md5($Password);
                    $_SESSION['realname'] = $cah->rname;
                    return 0;
                }
            }
        }
        return 1;
    }

Benutzeravatar
Dubbel
Beiträge: 197
Registriert: So Jul 06, 2008 6:25 pm
Wohnort: Kopenhagen
Kontaktdaten:

Re: Sicheres PHP

Beitrag von Dubbel » Di Mär 10, 2009 9:53 pm

Die Lösung ist aber ziemlich Datenbanklastig, da sie ja jeden einzelnen User auslesen muss, speichern, PHP überprüfen lassen, usw.
Wenn es nur 1-20 User geben wird, ist das okay (ich weiß ja nicht, wofür das ist ^^), aber bei mehreren ist es schneller, wenn du nur die passenden Einträge ausliest.

Ich mache das immer so:

Code: Alles auswählen

function Loginprep($name,$password) 
{
    if(!$connection = mysql_connect("localhost","XXX","XXX")) 
    {
        echo "<p class=\"mal\">Error while connecting to the Database<p>";
    }
    else if(!mysql_select_db("XXX"))
    {
        echo "<p class=\"mal\">Error the Database does not exists<p>";
    }
    else
    {
        $name = mysql_real_escape_string($name);
        $password = mysql_real_escape_string($password);
        $result = mysql_query("SELECT * FROM `XXX` WHERE `username` = '$name' AND `pwd` = '$password'"))
        if (result)
        {
            while($cah = mysql_fetch_object($result))
            {
                 $_SESSION['realname'] = $cah->rname;
            }
            $_SESSION['username'] = $Name;
            $_SESSION['password'] = md5($Password);
            return 0; // obwohl ich hier eigentlich 1 zurückgeben würde
        }
    }   
    echo "<p class=\"mal\">Error cannot access data<p>"; 
    return 1;
}
Das ist bei großen Systemen schneller. Kommt been darauf an, wie wichtig dir Performance ist ;)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sicheres PHP

Beitrag von Xin » Mi Mär 11, 2009 7:52 am

Dubbel hat geschrieben:Die Lösung ist aber ziemlich Datenbanklastig, da sie ja jeden einzelnen User auslesen muss, speichern, PHP überprüfen lassen, usw.
Wenn es nur 1-20 User geben wird, ist das okay (ich weiß ja nicht, wofür das ist ^^), aber bei mehreren ist es schneller, wenn du nur die passenden Einträge ausliest.

Das ist bei großen Systemen schneller. Kommt been darauf an, wie wichtig dir Performance ist ;)
Wer Speed haben will, sollte sich die schnell zu erreichenden Daten als Dateien auf die Festplatte legen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Dominik
Beiträge: 381
Registriert: Mo Jul 07, 2008 9:39 pm

Re: Sicheres PHP

Beitrag von Dominik » Fr Apr 17, 2009 5:16 am

ohje ohje das pw in ner session speichern , nenn ich nicht sicher... vorallem warum? speichert lieber einen generierten code in die session der eindeutig mit den user ist so wird das pw auch nur benötigt wenn man es braucht, den ohne code kann sich kein fremder einlooogen aber mit pw schon

mfg
Rechtschreibefehler sind gewollt und dienen der Unterhaltung

Benutzeravatar
Dubbel
Beiträge: 197
Registriert: So Jul 06, 2008 6:25 pm
Wohnort: Kopenhagen
Kontaktdaten:

Re: Sicheres PHP

Beitrag von Dubbel » Fr Apr 17, 2009 3:53 pm

Ich versteh dich nicht so ganz: Du willst nicht das Passwort in einer Session speichern (die ja quasi ein generierter Code ist, der dann den Zugriff auf eine dazugehörige Datei auf dem Server (!) freigibt), willst aber, dass einen generierten Code darin gespeichert, wird, der den User sofort einloggt? Wo ist der direkte Vorteil zum speichern der User-ID und des Passworts?

Wo ist da der Sinn? Die einzige Gefahr sehe ich darin, dass jemand irgendwie an die Session-Dateien auf dem Server rankommt, aber dann ist eh alles verloren ^^

Oder hab ich irgendetwas übersehen? :?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Sicheres PHP

Beitrag von cloidnerux » Fr Apr 17, 2009 4:41 pm

Du generierst eine zur Sesion bezogene ID, also du nutz z.B Uhrzeit, IP und Nutzername um eine Session ID zu generieren.
Wenn ein angreifer diese ID bekommt, nutzt sie ihm nichts, weil er eine unterschiedliche IP, Uhrzeit etc hat, als in der ID.
So ist die ID trozdem eindeutig und sicher.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dubbel
Beiträge: 197
Registriert: So Jul 06, 2008 6:25 pm
Wohnort: Kopenhagen
Kontaktdaten:

Re: Sicheres PHP

Beitrag von Dubbel » Fr Apr 17, 2009 5:27 pm

Ja, schon klar.

Aber wo ist das Sicherheitsrisiko, wenn man das Passwort in die Session speichert?

Dominik
Beiträge: 381
Registriert: Mo Jul 07, 2008 9:39 pm

Re: Sicheres PHP

Beitrag von Dominik » Fr Apr 17, 2009 6:35 pm

wenn die session ausgelesen wir dann haben sie das pw und können sich einloogen so haben sie nur den code


mfg
Rechtschreibefehler sind gewollt und dienen der Unterhaltung

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sicheres PHP

Beitrag von Xin » Fr Apr 17, 2009 8:32 pm

Dubbel hat geschrieben:Aber wo ist das Sicherheitsrisiko, wenn man das Passwort in die Session speichert?
Das Passwort läuft ständig - eventuell unverschlüsselt - über die Leitung?
Es liegt unverschlüsselt auf der Festplatte?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten