(Un)sicheres Loginformular

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Incognito
Mitglied
Beiträge: 88
Registriert: 10.03.2007 15:33

(Un)sicheres Loginformular

Beitrag 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
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag 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() " ?
Incognito
Mitglied
Beiträge: 88
Registriert: 10.03.2007 15:33

Beitrag 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
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag 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.
Incognito
Mitglied
Beiträge: 88
Registriert: 10.03.2007 15:33

Beitrag 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?
Benutzeravatar
djchrisnet
Mitglied
Beiträge: 1275
Registriert: 29.06.2007 15:52
Wohnort: Elmshorn
Kontaktdaten:

Beitrag 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:
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Incognito
Mitglied
Beiträge: 88
Registriert: 10.03.2007 15:33

Beitrag 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?
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag 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...
gruesse aus dem wilden sueden
larsneo
..::[krapohl.net]::..
Antworten

Zurück zu „Coding & Technik“