Ist mein Login-Script sicher?

  • Hallo an alle!


    Ich habe ein eingenes Login-Script erstellt und wollte mal fragen, ob man das so wie es ist einsetzen könnte oder ob es Sicherheitslücken gibt.
    Mein Script besteht aus zwei Dateien, zwischen denen der Nutzer per HTTP-Header umgeleitet wird.


    Datei anmeldung.php:


    Datei nutzerkreis.php:


    Danke schon im voraus.


    webmaster3000

  • Huhu :)

    • PHP
      1. <span class="syntaxdefault">error_reporting</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">E_ALL</span><span class="syntaxkeyword">); </span><span class="syntaxdefault"></span>

      Sollte auf keinem Fall in einem Live-System stehen. Aus einer Fehlermeldung kann ich Filesystem, Passwörter und mehr heraus lesen, wenn ich sowas provozieren will :wink:

    • Pfui, wieder deine Art von Affenformular, ich schicke dir gleich mal ein Vernünftiges Beispiel^^
    • Warum stehen die Passwörter Plain in der Datenbank? :O Wenigstens eine md5-Verschlüsselung mit einem Salt sind Minimum, sonst geht das wie bei Sony aus :wink:
    • Cookies? Du schickst dem Besucher / Hacker 2 Cookies mit dem Nutzernamen und der Angabe das er eingeloggt ist? Langzeit-Logins werden meine ich über einen Cookie geregelt, der eine Session-Id enthält^^ So kannst du dann mit diesem Wert nachsehen ob eine Session bereits besteht. Du solltest dann aber wenigstens den User-Agent-String in einem md5-Wert ebenfalls in der Session speichern um noch ein wenig zu verringern, dass man sich mit einem gestohlenen Cookie anmelden kann.
    • goto? Das macht man seit den 80ern nicht mehr :D
    • Beim Ausloggen würde ich die Session einfach zerstören? :)
    • einen vom Server gesendeten Header kann man folgen muss es aber nicht. Wenn ich noch Empfangen möchte was der Server danach mir sagen möchte, dann bleibe ich auf der Seite :) Daher lässt man nach einem header("location: ..."); das Skript sterben ( die() ); Außerdem solltest du nicht direkt mit echo arbeiten. Nach dem ersten echo kannst du nämlich keine Header mehr senden und ggf. soll der Besucher doch Information X dann doch nicht bekommen. Lieber über eine Variabel oder wenn es sein muss mit ob_start() arbeiten.


    Ansonsten fällt mir so spontan nichts ein^^ Nur etwas Allgemeines, arbeite lieber mit einem Template als dir immer alles kreuz und quer zusammen zu basteln und schau dir mal mein Affenformular an:

    PHP
    1. <span class="syntaxdefault"><?php<br /><br /></span><span class="syntaxkeyword">if(!isset(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"action"</span><span class="syntaxkeyword">])){<br /> </span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"notDouble"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">false</span><span class="syntaxkeyword">;<br /> </span><span class="syntaxcomment">// Damit verhindern wir das mehrfach absenden von Formularen<br /></span><span class="syntaxkeyword">}<br /><br />if(isset(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"action"</span><span class="syntaxkeyword">]) && </span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"notDouble"</span><span class="syntaxkeyword">] !== </span><span class="syntaxdefault">true</span><span class="syntaxkeyword">){<br /> <br /> foreach(</span><span class="syntaxdefault">$_POST </span><span class="syntaxkeyword">as </span><span class="syntaxdefault">$key </span><span class="syntaxkeyword">=> </span><span class="syntaxdefault">$val</span><span class="syntaxkeyword">){<br /> </span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$key</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">nl2br</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">htmlentities</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">trim</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$val</span><span class="syntaxkeyword">), </span><span class="syntaxdefault">ENT_QUOTES</span><span class="syntaxkeyword">));<br /> }<br /> <br /> </span><span class="syntaxdefault">$error </span><span class="syntaxkeyword">= array();<br /> <br /> if(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"name"</span><span class="syntaxkeyword">] == </span><span class="syntaxstring">""</span><span class="syntaxkeyword">){<br /> </span><span class="syntaxdefault">$error</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"name"</span><span class="syntaxkeyword">] = </span><span class="syntaxstring">"Sie müssen einen Namen eingeben"</span><span class="syntaxkeyword">;<br /> }<br /> <br /> if(</span><span class="syntaxdefault">filter_var</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"email"</span><span class="syntaxkeyword">], </span><span class="syntaxdefault">FILTER_VALIDATE_EMAIL</span><span class="syntaxkeyword">) === </span><span class="syntaxdefault">false</span><span class="syntaxkeyword">){<br /> </span><span class="syntaxdefault">$error</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"email"</span><span class="syntaxkeyword">] = </span><span class="syntaxstring">"Bitte geben Sie eine gütlige E-Mail-Adresse ein"</span><span class="syntaxkeyword">;<br /> }<br /> <br /> </span><span class="syntaxcomment">// ...<br /> <br /> // Wenn unser Fehler-Array leer ist:<br /> </span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">sizeof</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$error</span><span class="syntaxkeyword">) == </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">){<br /> </span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"notDouble"</span><span class="syntaxkeyword">] = </span><span class="syntaxdefault">true</span><span class="syntaxkeyword">;<br /> </span><span class="syntaxdefault">mail</span><span class="syntaxkeyword">();<br /> }<br />}<br /><br />if(</span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"notDouble"</span><span class="syntaxkeyword">] !== </span><span class="syntaxdefault">true</span><span class="syntaxkeyword">){<br /> <br /> if(</span><span class="syntaxdefault">is_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$error</span><span class="syntaxkeyword">)){<br /> </span><span class="syntaxcomment">// Wenn Fehler ein Array ist, dann geben wir die Fehler aus<br /> // Dies kann natürlich nur dann passieren, wenn <br /> </span><span class="syntaxkeyword">echo </span><span class="syntaxstring">"<ul class=\"errer\"><li>"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">implode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"</li><li>"</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$error</span><span class="syntaxkeyword">).</span><span class="syntaxstring">"</li></ul>"</span><span class="syntaxkeyword">;<br /> }<br /> <br /> echo </span><span class="syntaxstring">'<form><br /> <input type="text" name="name" value="'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"name"</span><span class="syntaxkeyword">].</span><span class="syntaxstring">'" /><br /> <form>'</span><span class="syntaxkeyword">;<br />} else {<br /> echo </span><span class="syntaxstring">'<p>Vielen Dank für Ihre Nachricht..</p>'</span><span class="syntaxkeyword">;<br />}<br /><br /></span><span class="syntaxdefault">?></span>


    Gruß Dustin


    PS: Ich bin Paranoid :wink: Das sollte man im Webbereich aber auch immer sein.

  • 1. Fein
    2. Muss nicht, ist aber einfach schöner :)
    3. Super :D
    4. Und wie der der Username verschlüsselt? Darf ich mich mal auf deiner Seite anmelden und anschließend einige Cookies Manuell an dich senden? :)
    5. 1993, in 2 Wochen bin ich 18


    Was du in deine Sessions reinschreibst ist dem Besucher relativ egal :)
    Eine Session ist eine Datei, die auf dem Server liegt. über die Session-ID ds Besuchers ist es dann möglich immer aus der selben Datei für den selben Besucher zu lesen.


    Edit: Warum löschst du einfach deinen Post? .__.

  • Hi,


    eigentlich müsste das vor der 2. Antwort von Sarkkan stehen.


    Ich habe mein Script entsprechend der Anmerkungen verbessert.


    anmeldung.php:


    nutzerkreis.php:


    Folgendes habe ich (bezogen auf die einzelnen Anmerkungen) verbessert:


    zu 1. geändert
    zu 2. hab ich so gelassen, da das nicht sicherheitsrelevant ist, oder?
    zu 3. geändert
    zu 4. der Username wird beim Besucher/Hacker verschlüsselt abgespeichert. beim anmelden wird er unverschlüselt aus der Datenbank gelesen und in der Session abgespeichert.
    zu 5. laut der Altersangabe auf deiner Profilseite bist du Jahrgang 1994? - trotzdem geändert
    zu 6. geändert
    zu 7. geändert


    Ist das jetzt sicher?


    Danke im Voraus,
    webmaster3000

  • Hallo an alle.


    Ich habe meinen Post deshalb gelöscht, weil ich dahcte, ich hätte was im Code vermehrt.
    War aber doch nicht so.
    Aus diesem Grund "Entschuldigung" an alle Beteiligten. :(


    &quot;Sarkkan&quot; schrieb:

    4. Und wie der der Username verschlüsselt? Darf ich mich mal auf deiner Seite anmelden und anschließend einige Cookies Manuell an dich senden? :)


    Der Username wird verschlüsselt aus der Datenabnk gelesen (Feld username_hash) und im Cookie gespeichert. Was soll daran nicht sicher sein?


    Zum Verständins hier meine Datanbankdaten (im Anhang).

  • Was genau schreibst du da den?
    Eine Community? Werden die Usernamen irgendwo vllt angezeigt, z.B. in Profilen?
    Demnach könnte ich einfach selbst Hash-Cockies erstellen und an deine Seite schicken.


    Veräts du mir den vllt noch, welche "Verschlüsselung" (Ein Hash ist übrigens keine Verschlüsselung :) ) du verwendet hast?


    PS: Der Benutzername ist aber nicht zufälligerweise 'adenauer' oder?
    Das Passwort was ich zu deinem Hash raus habe poste ich aber jetzt einfach mal nicht.

  • Ja, der Username ist "adenauer".
    Und ja, die Usernamen sollen angezeigt werden, aber wenn es sicherer wäre, sie nicht auszulesen, würde ich das ändern.
    Außerdem habe ich md5 verwendet, was in anderen Threads schon empfohlen wurde.
    Davo abgesehen glaube ich nicht, dass es hier relevant ist, wass ich mir da zusammenschreibe.


    Welche Verschlüsselung würdest du denn nehmen?
    Soll ich das "gehashte" Passwort auch noch als Cookie speichern?
    und *erraten* kann man die Daten immer, da kannste verschlüsseln, biste dumm und dämlich bist.


    webmaster3000

  • &quot;webmaster3000&quot; schrieb:

    Ja, der Username ist "adenauer".
    Und ja, die Usernamen sollen angezeigt werden, aber wenn es sicherer wäre, sie nicht auszulesen, würde ich das ändern.

    Dann wäre es doch merh als ein einfaches mich mit Fremdem Account einzuloggen. Ich brauche nicht mal das Passwort sondern muss einfach nur den Richtigen Cookie mitsenden und die Welt steht mir offen.
    Und so etwas ist eines der ersten Sachen die jemand der versuchen würde Sicherheitslücken zu finden, ausprobieren würde (weil es halt leider recht viele gibt die so etwas machen).

    &quot;webmaster3000&quot; schrieb:

    Außerdem habe ich md5 verwendet, was in anderen Threads schon empfohlen wurde.

    Ich habe immer gesagt das du einen Salt verwenden sollst.
    Hat den Vorteil, dass ich so halt nicht einfach den Usernamen kennen muss, sondern den Salt ebenfalls brauche.
    Oder aber ich probiere so lange herum bis ich einen identischen md5-Wert generiert bekomme.

    &quot;webmaster3000&quot; schrieb:

    Davo abgesehen glaube ich nicht, dass es hier relevant ist, wass ich mir da zusammenschreibe.

    Wie du siehst schon.
    In einer Community ist es Standard, dass Benutzernamen angezeigt werden. In einem einfachen Loginbereich, in dem du mit deinen Freunden irgendetwas teilen möchtest würden diese nicht angezeigt.


    &quot;webmaster3000&quot; schrieb:

    Welche Verschlüsselung würdest du denn nehmen?

    MD5 mit einem Salt reicht aus.

    &quot;webmaster3000&quot; schrieb:

    Soll ich das "gehashte" Passwort auch noch als Cookie speichern?

    Wenn du einen Salt verwendest kannst du das machen.. Anderer Vorschlag:
    Du erzeugst eine einzigartige ID die du auch in die Datenbank einträgst und als Cookie versendest (und als Session-Id verwendest). In der Session speicherst du zusätzlich noch den User-Agent.
    Den natürlich:

    &quot;webmaster3000&quot; schrieb:

    und *erraten* kann man die Daten immer, da kannste verschlüsseln, biste dumm und dämlich bist.

    Aber wir können es bösen Menschen so schwer wie Möglich machen :wink:

  • Du kannst in deiner Konfiguration oder sonst in deiner Index (halt die Datei, auf die du immer Zugriff hast) einen Salt hinpacken, am besten in eine Konstante.
    Diesen Salt generierst du in dem du 1-3x mit dem Kopf über die Tastatur rollst. Er bleibt immer gleich, dass ist kein Problem, da du ihn ja nirgendwo offen zeigst.
    Die Länge ist eigentlich sogar egal :)

  • Hab Salt hinzugefügt:

    Code
    1. <span class="syntaxdefault"><?php<br />    </span><span class="syntaxcomment">//Datenbankverbindung<br /></span><span class="syntaxdefault">    error_reporting</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    define</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'MYSQL_HOST'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'localhost'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    define</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'MYSQL_BENUTZER'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'root'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    define</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'MYSQL_PASSWORT'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">''</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    $db_link </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_connect</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">MYSQL_HOST</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">MYSQL_BENUTZER</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">MYSQL_PASSWORT</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    mysql_select_db</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"test"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">//Session Starten<br /></span><span class="syntaxdefault">    session_start</span><span class="syntaxkeyword">();<br /><br /></span><span class="syntaxdefault">    if </span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">$db_link</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        die</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Verbindung fehlgeschlagen'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /><br /></span><span class="syntaxdefault">    define</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SALT"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"xxxxxxxx"</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Wird nicht verraten<br /><br /></span><span class="syntaxdefault">    function weg</span><span class="syntaxkeyword">(){<br /></span><span class="syntaxdefault">        header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Location: nutzerkreis.php"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">        exit</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    function formular</span><span class="syntaxkeyword">(){<br /></span><span class="syntaxdefault">        ?><br /></span>        <form action="<span class="syntaxdefault"><?php echo $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'PHP_SELF'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> ?></span>" method="get"><br />            <input type="text" name="name" value="Benutzername" /><br />            <input type="password" name="kennwort" value="Kennwort" /><br />            Angemeldet bleiben? <input type="checkbox" name="bleiben" /><br />            <input type="submit" name="" value="einloggen" /><br />        </form><br />        <span class="syntaxdefault"><?php<br />    </span><span class="syntaxkeyword">}<br /><br /></span><span class="syntaxdefault">    if </span><span class="syntaxkeyword">((isset(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'name'</span><span class="syntaxkeyword">]))and(isset(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'kennwort'</span><span class="syntaxkeyword">]))){</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Wenn Anmeldeformular audgef?llt wurde<br /></span><span class="syntaxdefault">        </span><span class="syntaxcomment">//Eingaben escapen<br /></span><span class="syntaxdefault">        $name </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_real_escape_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">htmlentities</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'name'</span><span class="syntaxkeyword">]));<br /></span><span class="syntaxdefault">        $kennwort </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_real_escape_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">htmlentities</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'kennwort'</span><span class="syntaxkeyword">]));<br /></span><span class="syntaxdefault">        if</span><span class="syntaxkeyword">((</span><span class="syntaxdefault">$name</span><span class="syntaxkeyword">==</span><span class="syntaxstring">""</span><span class="syntaxkeyword">)or(</span><span class="syntaxdefault">$name</span><span class="syntaxkeyword">==</span><span class="syntaxstring">"Benutzername"</span><span class="syntaxkeyword">)or(</span><span class="syntaxdefault">$kennwort</span><span class="syntaxkeyword">==</span><span class="syntaxstring">""</span><span class="syntaxkeyword">)or(</span><span class="syntaxdefault">$kennwort</span><span class="syntaxkeyword">==</span><span class="syntaxstring">"Kennwort"</span><span class="syntaxkeyword">)){<br /></span><span class="syntaxdefault">            echo </span><span class="syntaxstring">"<form action=\""</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'PHP_SELF'</span><span class="syntaxkeyword">].</span><span class="syntaxstring">"\" method=\"get\">"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">            if </span><span class="syntaxkeyword">((</span><span class="syntaxdefault">$name</span><span class="syntaxkeyword">==</span><span class="syntaxstring">""</span><span class="syntaxkeyword">)or(</span><span class="syntaxdefault">$name</span><span class="syntaxkeyword">==</span><span class="syntaxstring">"Benutzername"</span><span class="syntaxkeyword">)){<br /></span><span class="syntaxdefault">                echo </span><span class="syntaxstring">"Bitte geben Sie Ihren Benutzernamen ein: "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">            echo </span><span class="syntaxstring">"<input type=\"text\" name=\"name\" value=\"$name\" />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">            if</span><span class="syntaxkeyword">((</span><span class="syntaxdefault">$kennwort</span><span class="syntaxkeyword">==</span><span class="syntaxstring">""</span><span class="syntaxkeyword">)or(</span><span class="syntaxdefault">$kennwort</span><span class="syntaxkeyword">==</span><span class="syntaxstring">"Kennwort"</span><span class="syntaxkeyword">)){<br /></span><span class="syntaxdefault">                echo </span><span class="syntaxstring">"Bitte geben Sie Ihr Kennwort ein: "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">            echo </span><span class="syntaxstring">"<input type=\"password\" name=\"kennwort\" value=\"$kennwort\" />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">            echo </span><span class="syntaxstring">"Angemeldet bleiben? <input type=\"checkbox\" name=\"bleiben\" />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">            echo </span><span class="syntaxstring">"<input type=\"submit\" name=\"\" value=\"einloggen\" />"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">            echo </span><span class="syntaxstring">"</form>"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">        else</span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">            $kennwort_hash </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> md5</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$kennwort</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">SALT</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">            $sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"SELECT `username`,`username_hash` FROM `passwoerter` WHERE `username` = '$name' AND `passwort_hash`= '$kennwort_hash'"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Alles auslesen, wo Name und Kennwort stimme<br /></span><span class="syntaxdefault">            </span><span class="syntaxcomment">//exit ($sql);<br /></span><span class="syntaxdefault">            $ergebnis </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$sql</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Anfrage versenden<br /></span><span class="syntaxdefault">            if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ergebnis </span><span class="syntaxkeyword">===</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">){<br /></span><span class="syntaxdefault">                exit</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Anfrage gescheitert."</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">            if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">mysql_num_rows</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ergebnis</span><span class="syntaxkeyword">)==</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">){</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Wenn genau 1 Datensatz zurückkommt<br /></span><span class="syntaxdefault">                $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'username'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $name</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Username in Session speichern<br /></span><span class="syntaxdefault">                $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eingeloggt'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> true</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//"Erlogreich eingeloogt" in Session speichern<br /></span><span class="syntaxdefault">                if </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'bleiben'</span><span class="syntaxkeyword">])){</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Wenn angemeldet bleiben angekreuzt wurde<br /></span><span class="syntaxdefault">                    $daten </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_fetch_assoc</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ergebnis</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">                    setcookie</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"login"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"ja"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">strtotime</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"2012-12-21"</span><span class="syntaxkeyword">));</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Cookies setzen<br /></span><span class="syntaxdefault">                    setcookie</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"username"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$daten</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'username_hash'</span><span class="syntaxkeyword">],</span><span class="syntaxdefault">strtotime</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"2012-12-21"</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">                    $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'cookie'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> true</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">                </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">                else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">                    $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'cookie'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">                </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">                weg</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Zu abgeschlossenen Seite gehen<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">            else</span><span class="syntaxkeyword">{</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Sonst<br /></span><span class="syntaxdefault">                $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eingeloggt'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//"Nicht eingeloggt" in Session speichern<br /></span><span class="syntaxdefault">                echo </span><span class="syntaxstring">"Login gescheitert."</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//und ausgeben<br /></span><span class="syntaxdefault">                formular</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Formular anzeigen<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    elseif </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'ja'</span><span class="syntaxkeyword">]))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Wenn Ausgeloggt wird<br /></span><span class="syntaxdefault">        if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'ja'</span><span class="syntaxkeyword">]==</span><span class="syntaxstring">"ausloggen"</span><span class="syntaxkeyword">){<br /></span><span class="syntaxdefault">            session_destroy</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Session zerstören<br /></span><span class="syntaxdefault">            if </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'cookieloeschen'</span><span class="syntaxkeyword">])){<br /></span><span class="syntaxdefault">               echo </span><span class="syntaxstring">"Cookie gel&ouml;scht!"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">                setcookie</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"login"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">null</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">time</span><span class="syntaxkeyword">()-</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">                setcookie</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"username"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">null</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">time</span><span class="syntaxkeyword">()-</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">            echo </span><span class="syntaxstring">"Logout erfolgreich!"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Meldung ausgeben<br /></span><span class="syntaxdefault">            formular</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Formular anzeigen<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    elseif </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">])){</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Wenn Cookie gefunden wurde..<br /></span><span class="syntaxdefault">        $username_hash </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_real_escape_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">htmlentities</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'username'</span><span class="syntaxkeyword">]));<br /></span><span class="syntaxdefault">        if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'login'</span><span class="syntaxkeyword">]=</span><span class="syntaxstring">"ja"</span><span class="syntaxkeyword">){</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//..und stimmt..<br /></span><span class="syntaxdefault">            $sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"SELECT `username` FROM `passwoerter` WHERE `username_hash` = '$username_hash'"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">            $ergebnis </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$sql</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">            $daten </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_fetch_assoc</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ergebnis</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">            if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">mysql_num_rows</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ergebnis</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">){<br /></span><span class="syntaxdefault">                $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eingeloggt'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> true</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Sessiondaten abspeichern<br /></span><span class="syntaxdefault">                $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'username'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $daten</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'username'</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">                $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'cookie'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> true</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">                weg</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Zu Nutzerkreis gehen<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">            else</span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">                formular</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    elseif </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eingeloggt'</span><span class="syntaxkeyword">])){</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Wenn schon eingelogt wurde<br /></span><span class="syntaxdefault">        if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eingeloggt'</span><span class="syntaxkeyword">]){<br /></span><span class="syntaxdefault">            weg</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Zu abgeschlossener Seite gehen<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">        else formular</span><span class="syntaxkeyword">();</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Sonst Formular anzeigen<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    else </span><span class="syntaxkeyword">{</span><span class="syntaxdefault"> </span><span class="syntaxcomment">//Sonst<br /></span><span class="syntaxdefault">        formular</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">?></span>


    Ich kann doch den md5 Hash mit Salt in einem Cookie abspeichern, oder?
    An seinen Browser sollte man eh keine Fremden (Hacker) lassen.


    Im Anhang die neuen Datanbankdaten.