Frage - PHP: Wie kann man verhindern, dass man einfach so das einloggen um gehen kann?

  • PHP

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von BornToBeRoot.

    Frage - PHP: Wie kann man verhindern, dass man einfach so das einloggen um gehen kann?

    Moin,

    ich habe mal eine Frage zum Thema PHP Login-System.
    Wie kann man das machen, dass man nur auf eine bestimmte Seite kommt wenn man wirklich eingeloggt ist?
    Da ich noch nie wirklich mit Login-Systemen in PHP gearbeitet habe.

    ~blaze~: Thema verschoben
    Mit Freundlichen Grüßen
    AtomiX

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Servus,

    im einfachsten Fall packst du die "Seite" (ne HTML oder PHP Datei nehme ich an) in einen Unterordner und schützt ihn via .htaccess.
    Siehe mein Beitrag hier (zweite Option mit dem htaccess Schutz): vb-paradise.de/index.php/Threa…ostID=1078511#post1078511

    Oder suchst du speziell eine Lösung mit PHP? Falls ja, existiert bereits eine Datenbank und eine Tabelle mit Benutzern?

    Btw, habe den Thread gemeldet damit er ins "Weitere Sprachen und sprachübergreifende Themen" Unterforum verschoben wird.


    Link :thumbup:
    Hello World
    Danke für deine Antwort.

    Link schrieb:

    Oder suchst du speziell eine Lösung mit PHP? Falls ja, existiert bereits eine Datenbank und eine Tabelle mit Benutzern?


    Nein ich habe es erstmal geplant mit einer txt zu machen, da weiß ich aber nicht genau wie ich das verknüpfen kann das er die Daten da raus zieht.
    Mit Freundlichen Grüßen
    AtomiX
    Hi,

    PHP-Quellcode

    1. <?php
    2. # Legen wir hier Benutzername und Passwort fest das der Benutzer eingegeben hat
    3. # Das eben entsprechend umbauen damit er sich hier die mit POST übergebenen Daten aus dem Formular holt.
    4. # Benutzername und Kennwort sind mit Doppelpunkt getrennt je Zeile in der Textdatei hinterlegt (wobei das Kennwort ein SHA1 Hash ist)
    5. $user = "John";
    6. $pass = "Abc123!";
    7. # So kannst du dir das Passwort SHA1-gehased anschauen:
    8. // echo sha1($pass);
    9. # Daten holen
    10. $Data = file_get_contents('./auth/data.txt');
    11. # Man kann den shit mit geöffnetem handle (fopen) auch via
    12. # fgets (http://php.net/manual/de/function.fgets.php) zeilenweise fetchen, aber scheißegal wie rum. fgets wäre
    13. # definitiv besser bei großen Dateien, aber das ist ja hier nicht der Fall.
    14. if ($Data) {
    15. # Aufsplitten bei Zeilenumbruch
    16. $Data = explode(PHP_EOL, $Data);
    17. # Zeilen durchlaufen
    18. foreach ($Data as $Line) {
    19. # Zeile aufsplitten bei Doppelpunkt
    20. $Auth = explode(':', $Line);
    21. # Checken ob es genau 2 Werte sind (Benutzername links vom ":" und Passwort rechts davon)
    22. if (count($Auth) == 2) {
    23. # Checken ob die übergebenen Daten passen
    24. if ($Auth[0] == $user && $Auth[1] == sha1($pass)) {
    25. echo "Login erfolgreich";
    26. } else {
    27. echo "Login fehlgeschlagen";
    28. }
    29. } else {
    30. echo "Da stimmt was nicht mit den Daten. Bitte Benutzer und Passwort zeilenweise durch Doppelpunkt getrennt eintragen.";
    31. }
    32. }
    33. } else {
    34. echo "Die Textdatei ist leer";
    35. }
    36. ?>


    Damit das Beispiel exakt funktioniert, erstelle im Ordner wo die PHP Datei liegt einen Unterordner "auth" und dort drin dann 2 Dateien:

    data.txt

    Quellcode

    1. John:dc0b16d9e34515ee180b5ad587370c259aa773dd


    .htaccess

    Quellcode

    1. Order Deny,Allow
    2. Deny From All


    Dateisystemstruktur ist dann so:

    Quellcode

    1. /index.php
    2. /auth/.htaccess
    3. /auth/data.txt


    Ich bin aber kein Freund von dem Shit, Daten in ner Textdatei zu lagern. Ne Datenbank wäre besser und ein htaccess Schutz hier ebenfalls eher von Vorteil (du machst im Grunde dasselbe nur ohne PHP). Aber wenn es unbedingt mit Textdateien sein muss, hast du hier eine funktionierende Lösung.


    Link :thumbup:
    Hello World
    Du hattest also vor Userdaten im Klartext zu speichern? Damit stehst du schon mit einem Fuß im Gefängnis.
    Diese "Zahlen" stellen einen Hash dar. Im Quellcode siehst du, dass es sich um einen SHA1 Hash handelt, womit du nach wie vor halb im Gefängnis bist.

    Mit der .htaccess kannst du Zugriffe von Usern gezielt einschränken.

    Ich glaube du hast noch nen ganz schön weiten Weg vor dir.
    Mach es mit der Session Abfrage.
    Wenn der Login erfolgreich ist, leg eine Session an.

    Quellcode

    1. $_SESSION["user_id"] = $uid;
    2. $_SESSION["user_name"] = $username;

    Dann fragst du in den Unterseiten den Status ab ob es eine Session gibt.
    Wenn nein, dann die(header("Location: index.php?site=login"));
    Nein! Doch! OHH!
    @EaranMaleasi

    Du weißt schon das ich das nur Testhalber machen wollte, ob das überhaupt so funktioniert wie ich es mir vorstelle.
    Später kann ich dann ja immer noch auf die DB zurück greifen ...

    Ich würde sagen du hast noch einen ganz schön weiten Weg vor dir ...
    Mit Freundlichen Grüßen
    AtomiX
    Ich würde sagen du hast noch einen ganz schön weiten Weg vor dir ...

    Nicht so unverschämt bitte. Er hat schon recht, das sind alles Dinge die man relativ schnell und einfach nachschlagen kann, zudem habe ich dir in den Kommentaren das wichtigste erklärt ("sha1") um auf Google danach zu suchen.

    @EaranMaleasi hat mit dem halben Fuß der im Gefängnis steht insofern Recht als dass natürlich SHA256 besser als SHA1 ist.
    Generell, ein Hash kann von einer Zeichenkette generiert werden und lässt keine Rückschlüsse auf den ursprünglichen Inhalt zu (anders als bei Verschlüsselungen oder Kodierungen). Das heißt du nimmst einen Text, z.B. "Test", hashst den mit SHA256 und heraus kommt 71988c4d8e0803ba4519f0b2864c1331c14a1890bf8694e251379177bfedb5c3. Die Eingabe des Benutzers (das Passwort) muss zuvor gehashed werden um es dann mit dem in der Datenbank (oder Textdatei) abgelegten Hash zu vergleichen. Sinn und Zweck des Ganzen ist mitunter, dass wenn jemand deine Textdatei in die Finger bekommt er nicht auch gleich die ganzen Passwörter im Klartext hat.
    Anyways, wirklich sicher wird der Krempel erst mit Salts. Mehr dazu hier.

    In einer .htaccess Datei werden serverspezifische Regelungen vorgenommen, das zu erklären dauert ne Weile - lies das hier. Unter anderem kann man Zugriff gewähren oder unterbinden und Überschreibregeln für URLs definieren - oder eben auch einen Passwortschutz einrichten - den Link zu Beschreibung und Beispiel hast du weiter oben bereits von mir erhalten.


    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Link“ ()

    Selbst reines SHA* ist unsicher (siehe Rainbow Tables), wenn deine Datenbank mal in falsche Hände kommen sollte...

    Kannst es direkt richtig machen und zusätzlich einen Salt verwenden:
    de.wikipedia.org/wiki/Salt_(Kryptologie)


    Ich würde aber auch erstmal mit .htaccess anfangen. Gibt dazu haufenweise Dokumentationen im Internet...
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!