Seite 1 von 1

(Un)sicheres Loginformular

Verfasst: 05.10.2008 21:13
von Incognito
Hallo,

Ich habe aufgrund dessen die Sessions nicht funktionieren, ein anderes Loginsystem gemacht, das auch funktioniert:

Code: Alles auswählen

<?php
    if(isset($_COOKIE['pksea_login'])) {
        echo "<script type=\"text/javascript\">";
        echo "window.location.href='user.php';";
        echo "</script>";
    }

    // Wenn das Formular abgesendet wurde ...
    if (!empty($_POST['username']) AND !empty($_POST['password']) AND !empty($_POST['submit'])) {

        // Muss definiert werden, da die functions.php sonst abbricht
        define ('IN_PHPBB', true);
        require '../forum/includes/functions.php';

       
        $username = $_POST['username'];
        $password = $_POST['password'];

       
        $connect  = mysql_connect("...","...","...");
        $select   = mysql_select_db("...");
        $result   = mysql_query("SELECT user_password FROM ... WHERE username = '$username' LIMIT 1");
        $row      = mysql_fetch_array($result, MYSQL_ASSOC);
        $userhash = $row['user_password'];

        // Die check_hash-Funktion zum Vergleich mit dem verschlüsselten Passwort in der Datenbank
        if (!empty($username) && !empty($password)) {
            $user = (phpbb_check_hash($password, $userhash) == true) ? 1 : 0;
        } else {
            $user = 0;
            
        }

        // Wenn die Daten stimmen, wird auf die entsprechende Datei umgeleitet ...
        if ($user == 1) {
        $username2 = GetUserID($username);
            setcookie("pksea_login", $username2, time() + 86400 * 3);
          
            echo "<script type=\"text/javascript\">";
            echo "window.location.href='user.php';";
            echo "</script>";
        } else {
            // Wenn nicht wird die Fehlermeldung ausgegeben ...
            echo "<div class='error'><b>Fehler:</b><br>Du hast deine falschen Daten angegeben!</div>";
        }
    }
?>

Ist aber sicher sehr angreiffbar, d.h frage ich: Wie kann ich es sicherer machen?

mfg

Verfasst: 05.10.2008 21:26
von Dr.Death
Lese mal die im Internet zu findenen Beiträge zu " http://de.wikipedia.org/wiki/SQL_Injection "

Beispiel: Du greifst den Username per $_POST ab und schiebst ihn ungeprüft in eine SQL Abfrage...... :o

Warum nutzt du nicht gleich die phpBB3 Function " request_var() " ?

Verfasst: 05.10.2008 21:33
von Incognito
Hallo,

Dies hätte ich ausgebessert, danke. Aber wie kann ich die Cookies schützen? Es kann ja jeder herbeikommen, und dieses auf "2" setzen und ist so als anderer User eingeloggt.

mfg

Verfasst: 05.10.2008 21:43
von Dr.Death
Benutze doch geich das Cookie und Sessionhandling von phpBB3.

http://www.lpi-clan.de/viewtopic.php?f=26&t=3550

Damit kannst Du auch anschliessend eine Berechtigungsabfrage realisieren.

Verfasst: 05.10.2008 21:52
von Incognito
Würde ich nur notfalls verwenden, da es für mich schwieriger ist.

Gäbe es eine Möglichkeit, dieses Sicher zu machen?

Verfasst: 06.10.2008 01:46
von djchrisnet
Incognito hat geschrieben:Gäbe es eine Möglichkeit, dieses Sicher zu machen?
http://www.lpi-clan.de/viewtopic.php?f=26&t=3550 :roll:

Verfasst: 06.10.2008 04:23
von gn#36
Wenn du schon nicht das (im übrigen recht einfach zu benutzende) Modul von Dr.Death benutzen willst, dann verwende für deinen Cookie wenigstens das PHP eigene Sitzungsverwaltungssystem (Stichworte: $_SESSION, [php:session_start], den Rest kannst du dir daraus zusammensuchen).

Verfasst: 06.10.2008 14:03
von Incognito
Hallo,

Ersteinmal danke für die Antwort =)

Aber leider funktionieren Sessions auf dem Server nicht mehr, sie werden auf einmal nicht gespeichert.

Wie soll ich also eine Session mit einem Cookie initialiseren?

Verfasst: 06.10.2008 15:14
von gn#36
In meinen Augen ist alles außer diesen beiden Methoden erheblich schwieriger sicher zu kriegen. Wenn du weder das phpBB noch das PHP Modul verwenden willst dann musst du dir die Infos fürchte ich selbst zusammensuchen.

Du musst eine eindeutige ID pro User vergeben, diese im Cookie unterbringen und den Anmeldestatus anhand der ID speichern. Dann solltest du noch sicherstellen dass Session Hijacking schwierig wird indem du bei jeder Anmeldung eine neue ID generierst. Dauerhafte Anmeldung ist schwieriger sicher zu kriegen, da muss der Cookie noch schwieriger zu fälschen sein. Dann wäre da noch die Frage der sicheren Passworteingabe und Prüfung die bei dir oben alles andere als sicher ist. An deiner Stelle würde ich von sowas erst mal die Finger lassen und mich mit einfacheren Dingen herantasten.

Verfasst: 06.10.2008 16:13
von larsneo
Wie kann ich es sicherer machen?
indem du a) das session management zum laufen bringst und b) auch noch optimierst - siehe session fixation und session hijacking.
darüberhinaus sollte man sich - wenn schon elementare funktionen von php nicht funktionieren - auch gedanken um die generelle config machen, hier hilft z.b. phpsecinfo...