Erste Versuche mit PHP - Login

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • also wenn du aufgeschlossen für neues bist, dann probiere doch mal PHP: [coderwiki]HowTos/PHP-Login-Registrierung-Tutorial[/coderwiki]
    Ansonsten bleibt eben nur die unsichere JavaScript Variante. Dort darfst du aber keine persönlichen Passwörter verwenden, weil diese von jedermann gesehen werden können.
    bei folgender Zeile ist ein "w" zu viel:

    Quellcode

    1. var passwword = "";



    abschweifend:
    Eine weitere und aufwendigere Variante ist das clientseitige hashen.. [google]javascript sha1[/google]
    parallel dazu musst du die dateien aber serverseitig gehashed anlegen... schlecht zu verwalten
  • Erste Versuche mit PHP - Login

    Hi Ihr,

    dOnut Du hast mich jetzt auf PHP gebracht!
    Nicht das ich das alles laut des Tutorials verstehe, aber das kann ja noch werden!

    Erstmal eine generelle Frage:

    Wo binde ich jetzt die ganzen php-Dateien ein?
    Ich habe ja eine Seite - nennt sich login.htm - wo momentan noch ein Baustellen-Bild ist.
    Die Seite hat aber schon alle Buttons und die Grundstruktur der anderen Seiten!

    Jetzt möchte ich dort dieses Login einbauen.
    Wie gehe ich da vor?

    Ich habe jetzt erstmal die php-Dateien auf den Server gepackt und wenn ich den Pfad z.B. zu registrierung.php angebe dann kann ich mich registrieren.

    2. Frage
    Habe gelesen, dass ich in secure.php das require('login.php'); --> in ein include('login.php'); umwandeln soll???
    Wenn ich da ein include mache, dann bekomme ich eine Fehlerseite!

    Ich glaube ich bräuchte da nochmal ein paar Tips!

    Danke schonmal jetzt :o)

    Gruß - mit rauchendem Kopf
    pucki
  • RE: versuche jetzt login mit php

    Hört sich insgesamt so an, als hättest du von verschiedenen Sprachen und Strukturen noch nicht genug Ahnung, kann das sein? Denn auch HTML und generelle Informationen zum Webseitenbau müssen bekannt sein. Deshalb die bitte: In wie weit verstehst du, was passiert? Wie weit reicht dein Wissen über HTML und die Arbeit mit Formularen?

    pucki3 schrieb:

    Wo binde ich jetzt die ganzen php-Dateien ein?
    Ich habe ja eine Seite - nennt sich login.htm - wo momentan noch ein Baustellen-Bild ist.
    Die Seite hat aber schon alle Buttons und die Grundstruktur der anderen Seiten!

    Im Grunde hast du da ja schon das richtige gemacht. Einfach die login.php-Datei aus dem Tutorial auf dem Server speichern und die Struktur der alten layout.htm-Datei übernehmen. Dabei musst du natürlich drauf achten, dass du nur das Layout übernimmst, wichtige Attribute der HTML-Elemente und PHP-Schnippsel nicht übersiehst oder vergisst.

    pucki3 schrieb:

    Habe gelesen, dass ich in secure.php das require('login.php'); --> in ein include('login.php'); umwandeln soll???

    Wo hast du das gelesen?
  • PHP - erst Versuch klappen schon!

    Hallo zusammen,

    sitze mal wieder über meinem php-Login!
    Habe eine andere Login-Variante gefunden.
    Bin jetzt schon etwas weiter, da schon einiges klappt!


    Folgenden Code habe ich in meine Login.htm-Datei eingebunden und sie login.php genannt:

    Login.php

    Quellcode

    1. <? include("#zugang.php"); ?>
    2. <html>
    3. ......
    4. </head>
    5. <body
    6. .....
    7. <form method="post">
    8. Username: <input name="user"><br>
    9. Kennwort:<input name="pass" type="password"><br>
    10. <input type="submit" value="OK">
    11. </form>
    12. <?
    13. $user = $_POST['user'];
    14. $pass = $_POST['pass'];
    15. include("zugang.php");
    16. if ($user == $user_ok && $pass == $pass_ok)
    17. include("#geheim.inc");
    18. else echo "Falsche Eingabe!";
    19. ?>
    Alles anzeigen




    Zusätzlich habe ich noch eine Datei - #zugang.php:
    #zugang.php

    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
    2. <?
    3. $user_ok = "Nilpferd";
    4. $pass_ok = "hippo";
    5. ?>
    6. <html xmlns="http://www.w3.org/1999/xhtml">
    7. <head>
    8. <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    9. </head>
    10. <body bgcolor="#ffffff"><p></p>
    11. </body>
    12. </html>
    Alles anzeigen


    Eine weitere Datei (Testdatei) - die nur aufgerufen wird, wenn Benutzername und Paßwort richtig sind ist folgende:

    #geheim.inc

    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd[/url]">
    2. <hr>
    3. <h1> Guten Tag </h1>
    4. <p> Diese Webseite wird nur nach Eingabe des Benutzernamens <?=$user_ok;?> und des Kennwortes <?= $pass_ok;?> angezeigt.</p>
    5. <?php
    6. ?>
    7. <html xmlns="[url]http://www.w3.org/1999/xhtml[/url]">
    8. <head>
    9. <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    10. </head>
    11. <body bgcolor="#ffffff">
    12. <p></p>
    13. </body>
    14. </html>
    Alles anzeigen


    Wenn ich jetzt die Login.php aufrufe und Benutzername und Passwort richtig eingebe dann erhalte ich den richtigen Text aus der #geheim.php-Datei.
    Soweit so gut!

    Jetzt würde ich gerne noch hinbekommen, dass ich die Angaben (Benutzername und Passwort) nicht schon vorgebe, sondern dass der Besucher sich selbst seine Angaben aussucht (registriert). Momentan versuch ich mich daran, bin aber noch nicht wirklich weit!

    Letztendlich möchte ich realisieren, dass jeder Besucher sich einloggt und für jeden Besucher eine unterschiedliche Liste bei richtiger Eingabe ausgegeben wird.

    Vielleicht habt Ihr ja da noch ein paar Tips für mich?!
  • Hallo,

    bitte den Quellcode in die richtigen Tags packen, das liest sich dann einfach leichter. Wenn du was machen willst mit variablen Daten, dann benötigst du ein Speichermedium. Das Kann eine Datenbank sein oder normale Files.

    Dazu musst du dich entscheiden. Was schwieriger ist oder aufwändiger ist, kann man sich streiten. Ich persönlich bevorzuge die Datenbank. Das geht aber schon relativ spezifisch in die Materie und würde da auf etwas Fachliteratur verweisen. Wenn du dir das zutraust, überspring die Basics und schmeiß dich ins Wasser: Fertiges Login-Skript mit PHP und MySQL

    Fall das für den Anfang zu schwer ist: PHP - Tutorial Kann ich nur empfehlen, da es an sich nur die relevanten sachen behandelt und das kurz und knapp.

    so long
    jd
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Wenn sich jeder Benutzer mit eigenem Passwort und Username einloggen können soll musst du entweder die Variante, die d0nut oben gepostet hat - wo die Daten in eine Textdatei gespeichtert werden - verwenden oder du benötigst eine Datenbank.
    Dazu gibt es diverse tutorials bei [google]Php login mysql[/google], ein sehr ausführliches gibt es hier
    Soweit ich das verstanden haben willst du verschiedene Benutzergruppen, die jeweils einen anderen Inhalt bekommen.

    Dafür kannst du z.B. in der Datenbank noch eine Spalte 'user_group' anlegen, die z.B. die Werte 1,2 oder 3 hat und je nachdem welcher dem User zugeordnet wurde der Seiteninhalt generiert wird.

    Edit: Oh, das war wer schneller;)
  • Kurz ne Frage zur Sicherheit wegen md5 und so....

    Du (d0nut) hast gemeint das md5 nicht mehr sicher wäre, man sollte SHA1 verwenden.

    Habe jetzt auch biscshen gegooglet und wenn das Passwort bei md5 nur eine Länge von 4 Zeichen hat und alles kleine Buchstaben sind dann kann der das ja ganz einfach rausfinden Oo.

    Wäre es sinnvoll den generierten md5 String in einen SHA1 umzuwandeln? Also doppelte Verschlüsselung! ^^
  • d0nut schrieb:

    Den besten Schutz hat man mit Salted Hashes... wenn man also bei jedem Benutzer nochmal einen inviduellen String/Salz dazu packt.
    Dann wirken auch keine Rainbowtable Attacken...


    Muss man aber für Salted Hashes eine eigene Funktion dafür erstellen?
    Und wie läuft das dann - wird der Salted Hash einfach an das Passwort dran gehängt und alles komplett mit md5 verschlüsselt^^?
  • Funktion... keine Funktion.. ja, ich würde dir empfehlen es in eine Klasse zu packen. Notwendig ist es natürlich nicht.

    Mal runtergetippt sieht das glaube ich so aus:

    Quellcode

    1. function save($password) {
    2. $salt = rand();
    3. $password = $salt.$password;
    4. $db->update($salt, $password);
    5. }
    6. function login($password) {
    7. return $db->password == sha1($db->salt.$password);
    8. }
  • danke für die Info. Ich kannte die Funktion hash() noch gar nicht. Wurde erst mit PHP 5.1.2 eingeführt.

    Wobei ich nicht sofort zusagen würde, dass ich die Funktion auch einsetzen würde. Ok SHA-1 hat seine Schwächen...
    Aber ein mit individuellem Salz gespeichertes Passwort... das ist schon ziemlich aufwendig zu knacken. Ich glaube da ist selbst Bruteforce schneller ;)

    Ich würde aber nur ungern 256 Byte allein für das Passwort "rausschmeißen" (128 Byte Passwort + 128 Byte Salz)
    Gehen wir mal von 3.000 Benutzern aus. Dann haben wir 750 KB an Passwortinformationen.... Nüchtern betrachtet immer noch nicht viel, Ich gebs zu :D

    Ich glaube ich würde mich dennoch für die kleinere SHA-2 Variante - den 256er - entscheiden... immerhin nur 64 Byte pro Hash und er besitzt den Fehler des SHA-1 nicht.
  • Man kann auch sowohl sha und md5 abspeichern (natürlich mit Salz) und beides überprüfen. Ich denke dort Kollisionen zu finden ist auch nicht eben gemacht, zumal für sowas noch überhaupt keine Lösungsansätze existieren- ist auch nicht soo "speicherfressend", dafür rechenintensiver. Außerdem gehen die nicht-Brute-Force-Verfahren wie Rainbow-Tables auch davon aus, dass die Angreifer den Hashwert kennen, das ist normlerweise ja auch nicht der Fall. Also sollte auch die Datenbank an sich gut geschützt sein vor Angreifern. Was auch oft vergessen wird ist, das auch noch soviel Salz und mehrfaches Hashing nix bringen, wenn die User dusselige Passwörter wählen. Wenn also schon so ein Aufwand getrieben wird mit doppeltem Salz und langen Hashverfahren, sollte man auch Kennwortrichtlinien definieren und deren Einhaltung überwachen, sonst gerät man womöglich unnötig in die Schlagzeilen wie Sarah Palin :D

    Letzendlich ist es eine Frage des Aufwandes (persönlich so wie maschinell), den man betreiben will und wie schützenswert die damit gesicherten Daten sind.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • aus aktuellem Anlass:

    Das NIST hatte 2007 zur Einreichung neuer Hash-Designs aufgerufen, nachdem die weit verbreitete Hash-Funktion SHA-1 als unsicher in Verruf geraten war. Auch SHA-2 genießt wegen der starken Ähnlichkeit zu SHA-1 nicht mehr das volle Vertrauen der Kryptogemeinde, obwohl bislang keine Schwächen bekannt sind. Daher forschen weltweit Kryptologen an einer neuen Generation von Hash-Funktionen für den Nachfolgestandard "SHA-3". Nach bisherigen Planungen soll die endgültige Entscheidung für den Nachfolger 2012 fallen.

    Quelle: heise.de/newsticker/Neue-Hashe…das-Land--/meldung/118352
  • Seba,

    der Vorteil von Salts (insb. nutzerspezifischen) ist weniger, dass sie vor dusseligen Passwörtern schützen können, sondern vielmehr, dass ein Hacker dem die Datenbanktabellen vorliegen, nicht aus md5("passwort") ableiten kann, wer alles als sein Passwort "passwort" eingegeben hat. Er wird, den Salts sei dank, für jeden Nutzer individuell zurückrechnen lassen müssen, was für ein Passwort verwendet wird. Der Aufwand, gekoppelt mit starken Verschlüsselungen wie eben z.B. sha512 und global Salts sollte dem Hacker zumindest viel Arbeit machen (und sei's nur Rechenzeit).

    Es führt natürlich kein Weg daran vorbei, seine Server entsprechend abzusichern, obgleich angemerkt sei, dass gerade bei Shared Hosting der normale Benutzer keinerlei Einfluss auf die Serversoftware hat (obgleich da die durchschnittliche Qualität im Allgemeinen höher ist als bei so einigen Tröten die ja auch hier im Forum rumgeistern, die ihren "ersten Server" haben...).

    Man könnte hier im Wiki mal einen Eintrag zum Thema "sichere Webapplikationen" schreiben, der auch explizit darauf eingeht, welche Basics man zumindest beachten muss, um seinen Server abzusichern.
  • philippgerard schrieb:

    Seba,

    der Vorteil von Salts (insb. nutzerspezifischen) ist weniger, dass sie vor dusseligen Passwörtern schützen können, sondern vielmehr, dass ein Hacker dem die Datenbanktabellen vorliegen, nicht aus md5("passwort") ableiten kann, wer alles als sein Passwort "passwort" eingegeben hat. Er wird, den Salts sei dank, für jeden Nutzer individuell zurückrechnen lassen müssen, was für ein Passwort verwendet wird. Der Aufwand, gekoppelt mit starken Verschlüsselungen wie eben z.B. sha512 und global Salts sollte dem Hacker zumindest viel Arbeit machen (und sei's nur Rechenzeit).

    Danke, ich weiß wofü Salt gut ist. Deswegen sagte ich die meisten Angriffe ( Rainbow-Tables, offline zurückrechnen) funktionieren nur, wenn man davon ausgeht, dass der Angreifer an die Hashes gelangt. Davor und nur davor schützt Salz. Aber wie ebenfalls bereits gesagt, es nützt nix, wenn das Passwort "1234" ist und der Erinnerungssatz "Die ersten vier natürlichen Zahlen"... Da hilft kein Salzbergwerk der Welt. Deswegen Kennwortrichtlinien definieren und durchsetzen und natürlich Server absichern.

    philippgerard schrieb:


    Man könnte hier im Wiki mal einen Eintrag zum Thema "sichere Webapplikationen" schreiben, der auch explizit darauf eingeht, welche Basics man zumindest beachten muss, um seinen Server abzusichern.

    Ich spielte bereits mit dem Gedanken...
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • Probleme mit Session_start

    Hallo,
    habe mich mal wieder an dem "tollen" Login versucht.
    Habe jetzt das Tutorial von dOnut angesehen.

    Problem 1 - login.php

    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="p_submit" value="1" />
    <table>
    <tr>
    <td>Benutzername:</td>
    <td><input type="text" name="p_user" value="<?php echo $_POST['p_user']; ?>"/></td>
    </tr>
    <tr>
    <td>Passwort:</td>
    <td><input type="password" name="p_password" /></td>
    </tr>
    <tr>
    <td colspan="2">
    <input type="submit" value="Login" />

    Nachdem ich mich registriert habe (registrierung.php).

    registrierung.php

    <?php
    if($_POST['submit'] == 1) {

    $line = $_POST['user'] ."\t". md5($_POST['password'])."\n";
    $handle = fopen('db.txt', "a");
    fwrite($handle, $line)or die('Fehler beim Schreiben');
    fclose($handle);
    }
    ?>

    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="submit" value="1" />
    <table>
    <tr>
    <td>Benutzername:</td>
    <td><input type="text" name="user" /></td>
    </tr>
    <tr>
    <td>Passwort:</td>
    <td><input type="password" name="password" /></td>
    </tr>
    <tr>
    <td colspan="2">
    <input type="submit" value="Registrieren" />
    </td>
    </tr>
    </table>
    </form>


    <html >
    <head>

    <title>Unbenannte Seite</title>
    </head>

    <body bgcolor="#ffffff">
    <p></p>
    </body>

    </html>


    Dann bei der login.php sowohl Benutzername als auch Passwort richtig eingegeben habe.
    Jetzt erscheint nach Klick auf "Login" die gleiche Seite, nur dass das Passwort nicht mehr dasteht.
    Das Formular leitet mich nicht richtig weiter!

    Fehler:
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by ...

    Gehe ich über die admin.php

    admin.php
    <?php require('secure.php'); ?>
    TO SECURE

    erhalte ich die richtige Seite!


    secure.php
    <?php session_start(); ?>

    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="p_submit" value="1" />
    <table>
    <tr>
    <td>Benutzername:</td>
    <td><input type="text" name="p_user" value="<?php echo $_POST['p_user']; ?>"/></td>
    </tr>
    <tr>
    <td>Passwort:</td>
    <td><input type="password" name="p_password" /></td>
    </tr>
    <tr>
    <td colspan="2">
    <input type="submit" value="Login" />
    </td>
    </tr>
    </table>
    </form>

    Kann mir da jemand weiterhelfen?!
    Bin - wie Ihr schon mitbekommen habt - PHP-Anfänger!
    Das mit den Sessions ist mir nicht so recht klar!

    Werde jetzt ne Runde mit dem Hunde gehen und dann ab ins Bett!

    Freue mich schon auf Anregungen, wie ich das besser gestalten kann!
    Möchte später auch schaffen, das jeder Benutzer eine andere Seite aufrufen kann - ohne Datenbank!

    Gruß pucki
  • Hi,
    ich bin es schon wieder!

    Du meinst, dass ich die admin.php aufrufen muss (dOnut), allerdings hat er da dieses Session Problem!
    Habe in einem Buch gelesen, das man ein Verzeichnis "tmp" braucht, wo die Sessions abgelegt werden können?!
    Kann ich eigentlich auch auf die Sessions verzichten - ich will nur ein einfaches Login, bei dem ich für unterschiedliche Benutzer unterschiedliche Inhalte anzeigen kann!

    Bin leider nicht wirklich ein "Held" in php - sorry!

    Schau mir noch mal meine Verzeichnisse - da muss irgendwas falsch laufen.
    Hab jetzt schon die Dateien (admin.php, registrierung.php, ...) direkt ins root - Verzeichnis "/" reingelegt und auch das Verzeichnis (?) "tmp".

    Lieben Gruß
    und ein großen Dank, für die Hilfe bis jetzt!