1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Loginscript selbst erstellt

Dieses Thema im Forum "PHP & Co." wurde erstellt von timroh, 05.01.10.

  1. timroh

    timroh Cripps Pink

    Dabei seit:
    08.07.09
    Beiträge:
    148
    Hallo,
    Weiss jemand was mit diesem Script nicht stimmt?(Ich bin noch nicht lange in Webprogramierung zuhause)
    Die Variablen werden Mittels HTML POST versendet und funktionieren soweit einwandfrei.
    Ich will eigentlich ein einfaches Loginscript erstellen.
    PS: Wie ihr sehen könnt wird im if ein beliebiger Wert des Arrays benutzer abgefragt. Geht das denn so überhaupt???
     
  2. jerry1

    jerry1 Idared

    Dabei seit:
    07.02.05
    Beiträge:
    28
    Guten Abend,

    also mir kommt dein Code ziemlich spanisch vor. Vielleicht kannst du etwas genauer erklären, was du mit deinem Code vorhast, bzw. was passieren soll? Also zB. willst du die Nutzerdaten in einer Datei speichern? Wenn ja, wozu legst du dann ein Array an mit dem du das eingegebene vergleichst?
    Desweiteren sollten die Passwörter in irgendeiner verschlüsselt bzw. gehasht sein. Aber nochmal zurück zum Anfang:

    ok, jetzt hab ich deinen Gedankengang kapiert. Sorry, aber da muss man erstmal draufkommen =)
    Also zunächst: so macht man es eher nicht. :)

    Benutzer und Passwort in der PHP Datei selbst zu speichern ist keine gute Idee.
    Das prinzipielle Vorgehen ist oft folgendes:
    Der Nutzer füllt ein Formular aus, und sendet es ab (so wie du es gemacht hast).
    In der Auswertung der eingegebenen Daten wird nun überprüft, ob ein Benutzer existiert und ob das Passwort stimmt. (entweder man fragt eine Datenbank, oder zB eine Datei, o.ä.)
    Sollte das Passwort korrekt sein, kann man nun den geschützten Inhalt anzeigen.
    Das macht man meistens eher mit einem include. das ganze mit fopen zu machen ist nicht sinnvoll, vlt nichtmal möglich, hab es noch nie ausprobiert.
    in deinem Fall zum Beispiel
    Code:
    <?php 
    include('hansmuster123.html');
    Wenn man nun mehrere Seiten hat, die alle geschützt sein sollen, muss man (um nicht immer wieder das Passwort überprüfen zu müssen) sich irgendwie merken, dass der Benutzer die Seiten sehen darf. Das macht man überlicherweise in Session-Variablen (kann man auch per Cookies machen).
    Und wenn man soweit ist, kann man dann auf jeden geschützte Seite quasi eine Art
    Code:
    if($benutzerOK) {
       //geschützt
    } else {
       echo "Access Denied";
    }
    
    einfügen.

    Deinem bisherigen Code zu urteilen nach, ist das jetzt vermutlich etwas viel auf einmal, aber vielleicht kannst du mit den Stichworten was anfangen und dich mal dran versuchen.
    Vielleicht habe ich mich aber auch komplett unverständlich ausgedrückt, dann frag einfach nach ;)

    Gruß jerry1
     
  3. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Code:
    <?php
        $vorname = $_POST["vorname"];
        $password = $_POST["password"];
        $datei = fopen([color=red]'[/color]hansmuster123.html[color=red]'[/color], [color=red]'[/color]r[color=red]'[/color]);
        $benutzer = array(
            "Franz"
        );
        $passwort = array(
            "Franz" => "1.1.01"
        );
        if ([color=red]in_array([/color]$benutzer[color=red], $vorname)[/color] [color=red]AND[/color] $password == $passwort[$vorname]) {
            echo $datei[color=red];[/color]
        } [color=red]else {
            echo 'Kein Zugriff';
        }[/color]
    ?>
    Ich habe dir mit Rot einmal ausgebessert, was du sicher verändern musst. Allgemein empfehle ich immer gerne http://tut.php-q.net , ist ein super gutes Tutorial. Habe es auch dort erlernt!

    Dein $benutzer ist ein sogennantes Array. Wenn du einmal Mathematik gehabt hast, ist dir der Begriff Matrix sicher geläufig. Ein Array hat eine sehr ähnliche Funktionsweise. Du musst also prüfen, ob der Vorname in dieser Matrix vorhanden ist. Dies geschiecht mit in_array().

    Dies ist eine nicht sehr sichere Variante, die du da aufgebaut hast, normalerweise würde man das Passwort noch verschlüsseln, aber das lasse ich mal so sein hier.
     
  4. timroh

    timroh Cripps Pink

    Dabei seit:
    08.07.09
    Beiträge:
    148
    Ich habe glaube ich in deinem Script noh ein Fehler gefunden und zwar:
    Du hast die Beiden vertauscht.
    Mfg
    Tim Rohner
     
  5. timroh

    timroh Cripps Pink

    Dabei seit:
    08.07.09
    Beiträge:
    148
    Was ist eigentlich an meinem Loginscript unsicher?
    Und wie kann ich es jetzt machen, dass sich PHP die Variabeln merkt und sie an eine Weitere Seite schickt? Reicht es wenn ich vor jede Seite diesen Anfang setze...
    ...oder muss ich jedes mal alle Arrays neu eintragen?
     
  6. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    PHP oder der Apache hat einen Fehler, PHP fällt aus oder Apache meint, .php-Dateien müssen nicht mehr an den Interpreter gesendet werden.

    Folge: Es könnte der Quellcode ausgegeben werden. Und in deinem Fall direkt das Passwort bzw. alle zugehörigen (gesicherten) Seiten.

    Und ja, ich habe die beiden vertauscht. Unabsichtlich.
     
  7. NightMare

    NightMare Zuccalmaglios Renette

    Dabei seit:
    09.11.04
    Beiträge:
    263
    Na hallo,
    Ich bin mir nicht sicher ob du das genannte Tut bereits angeschaut hast.
    Persönlich empfehle ich dir jedoch folgenden Aufbau für deine Seiten (nur mal als Einstieg, lässt sich beliebig ausbauen):

    index.php (enthält Abfragen und baut deine Site zusammen)
    ./module/blabla.html

    Nun kannst du in der index site nur deinen php Code schreiben. Die Abfrage nach dem Passwort und die Abfrage nach den Rechten (falls eingeloggt). Macht alles viel übersichtlicher.

    Falls dein User nun Rechte hat, dann baust du dir aus einer URL die so aussieht den include zusammen: www.gaga.de/index.php?module=blabla

    Nun kannst du mit der get variabel den Parameter module auslesen und diesen in deinen include einbauen.
    $site_module = $_GET["module"];
    include("./module/".$site_module.".html");

    Mit dieser Konstellation greift der User immer auf deinen index.php zu... Dadurch brauchst du die Überprüfung nur einmal zu programmieren (der Rest wird mittels der URL immer selbst zusammengesetzt).

    Betreffend Daten speichern empfehle ich dir http://ch.php.net/manual/de/book.session.php und die Stichworte session_start / ¨$_session[""] / session_destroy...

    Viel Glück und bei Fragen ansonsten auch per PN...
    Gruss
     
  8. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Anstatt einfach $ste_module = $_GET['module"] und dann einbinden empfehle ich noch eine Abfrage durchzuführen, ob die Datei überhaupt vorhanden ist und basename() um wirklich keinen Pfad dabei zu haben. Viel sicherer!

    x-trem sicher wäre noch die Eingrenzung nach erlaubten und unerlaubten Schemen, aber das wäre zu viel für den Moment.
     
  9. funz3l

    funz3l Prinzenapfel

    Dabei seit:
    12.11.07
    Beiträge:
    551
    Code:
    $vorname = $_POST["vorname"];

    sowas ist nicht besonders sicher. Alle Variabeln die von einem Benutzer kommen könnten auch manipuliert sein oder gar php code enthalten daher solltest du diese bevor du die Variabeln weiter verwendest auf jeden Fall überprüfen!
    Und noch nen kleiner Tipp, verwerfe deine Variante die ist nämlich nicht wirklich schön gelöst. Mach das wie oben schon gesagt wurde lieber mit Sessions und Cookies etc. dazu gibt es jede Menge Codes und Tuts im Internet einfach mal bei Google suchen!
     
  10. naich

    naich Pommerscher Krummstiel

    Dabei seit:
    22.11.08
    Beiträge:
    3.059
    Und noch ein Tipp, der mir gleich ins Auge gesprungen ist:
    Code:
    $password==$passwort...
    Das ist gefährlich hoch 10, 2 Variablen nur duch einen Buchstaben unterscheidbar zu halten!

    Benenne das lieber in $possible_logins oder so um, und das sagt dann auch den Inhalt noch besser aus.

    Aber es stimmt schon, lieber das Passwort verschlüsselt abspeichern, dann in ner extra Datei oder von mir aus auch direkt im Skript. Es gibt da verschiedene Möglichkeiten, zB. md5.
     
  11. funz3l

    funz3l Prinzenapfel

    Dabei seit:
    12.11.07
    Beiträge:
    551
    Sorry muss mal ein wenig Klugscheissen:
    md5 ist keine Verschlüsselung sondern eine Hashfunktion und gilt heute zudem nicht mehr als sicher.
     
    hillepille gefällt das.
  12. naich

    naich Pommerscher Krummstiel

    Dabei seit:
    22.11.08
    Beiträge:
    3.059
    Ist mir bekannt. Ich wollte nur den TE nicht noch mehr verwirren.
    Und mit unsicher meinst du, das es mittlerweile möglich sein soll, aus einem Hash-Wert das Original-Passwort wieder herzustellen? Das wäre mir neu...
     
  13. funz3l

    funz3l Prinzenapfel

    Dabei seit:
    12.11.07
    Beiträge:
    551
    Soweit ich weiss kann man das Originalpasswort nicht zurückrechnen jedoch gibt es einige Möglichkeiten Kollisionen zu finden irgendeine Computerzeitschrift (ich weiss gerade leider nicht welche) hat das auch mal getestet und in recht kurzer Zeit geschafft (wenn ich mich recht erinnere hat das nur ein paar Stunden gedauert) daher kann MD5 nicht mehr als sicher angesehen werden.
    Zudem gibt es ja auch noch die tausenden Rainbowtabellen im Internet.
     
  14. naich

    naich Pommerscher Krummstiel

    Dabei seit:
    22.11.08
    Beiträge:
    3.059
    Da magst du sicher recht haben. Was ist deiner Meinung nach die sicherste Variante, in Web-Login-Anwendungen das Passwort zu verschlüsseln? (ich hab bisher die password()-Funktion von SQL verwendet...)
    Tja, da sind halt die User gefragt, dass sie sich ordentliche Passwörter ausdenken.
     
  15. funz3l

    funz3l Prinzenapfel

    Dabei seit:
    12.11.07
    Beiträge:
    551
    Ich nutze immer eine Kombination aus mehreren Hashfunktionen zum Beispiel md5 und sha1 ist natürlich auch die Frage inwieweit das für das entsprechende Projekt überhaupt sinnvoll ist für den Loginbereich einer Musikgruppe muss man sicherlich nicht so großen Wert auf Sicherheit legen wie bei anderen Projekten. Eine Kombination erschwert das ganze aber schon erheblich und reicht für die meisten Sachen die man so macht vollkommen aus. Zudem ist es ja kein großer Mehraufwand.

    Ich will auch md5 hier nicht schlecht machen wollte nur erwähnt haben das es nicht zwingend die Sicherste Variante ist. Wenn er wirklich selbst ein Loginscript schreiben möchte wird er ohnehin nicht drumherum kommen sich näher mit PHP auseinanderzusetzen.

    Viel wichtiger finde ich allerdings das die Daten die vom Benutzer kommen überprüft werden, da kann man noch so eine schöne Hashfunktion haben wenn via Formular PHP Code eingeschleust werden kann.


    Naja wieviele User denken sich vernünftige Passwörter aus? Darauf sollte man sich nicht zwingend verlassen ;)
     
  16. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    md5 und sha1 nützen dir auch nichts, wenn du einen Fehler im Skript hast, der es dir erlaubt, direkt den Hash als Passwort anzugeben...
     
  17. funz3l

    funz3l Prinzenapfel

    Dabei seit:
    12.11.07
    Beiträge:
    551
    Gut das ist natürlich klar wenn ich dem Angreifer durch mein Script die Möglichkeit gebe Rootrechte auf derm Webserver zu erhalten dann ist alles hinfällig. Durch die Verwendung mehrerer Hashfunktionen werdne aber zumindest die Rainbowtabellen zu einem gewissen teil ausgehebelt. Bei wirklich wichtigen Sachen setze ich sowieso dann eine aufwendigere Hashfunktion ein als md5 oder sha1. Da muss man dann halt ein paar kleine Abstriche bei der Geschwindigkeit machen. Zudem dann noch ein salt verwenden das am besten permanent neu generiert wird dann wird das ganze schon relativ sicher. Natürlich setzt alles das vorraus das man auch ein sicherers Script hat aber wir brauchen ja auch nicht über die Sicherheit von Zimmertüren sprechen wenn man neben der Tür ein riesen Loch in der Wand hat.
     
  18. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Was ist für dich eine "aufwendigere" Hashfunktion als md5 oder sha1? Die Kombination derer bringt ja schon eine gewaltige Sicherheit, was will man da noch mehr sichern?
     
  19. funz3l

    funz3l Prinzenapfel

    Dabei seit:
    12.11.07
    Beiträge:
    551
    Man könnte zum Beispiel sha256 oder auch sha512 einsetzen das ist ja schon etwas aufwendiger als sha1 oder md5.
     
  20. lucasM

    lucasM Erdapfel

    Dabei seit:
    05.10.15
    Beiträge:
    4
    Ich hätte da eine Frage ich mach gerade ein Login mit php und der funktioniert nicht so wie er sollte.
    Wäre gut wenn da mal einer drüber schauen kann.
    Das Problem ist im Moment:
    Beim Bestätigen also klick auf Login wird man nicht weitergeleitet.
    Ich bedanke mich schon mal ;)

    Lg Lucas

    <?php
    include('daten.php');
    if(isset($_post['submit']))
    {
    $user_login = $_Post['user'];
    $pass_login = $_Post['pass'];
    if($user_daten == $user_login && $pass_daten == $pass_login){
    echo'<meta http-equiv="refresh" content="3"; URL="erfolgreich.php" >';
    echo"Login erlolgreich du wirst in 3 Sekunden weitergeleitet.";
    }
    else{
    echo "Error.";
    }
    }
    ?>
    <html>
    <head>
    <Title>PW Schutz
    </title>
    </head>
    <body>
    <form name="login" action="" method="post" enctype="text/html">
    <input type="text" name="user" value="Benutzername" sice="20" maxlength="50" />
    <br />
    <input type="passwort" name="pass" value="Passwort" size="20" maxlength="50" />
    <br />
    <input type="submit" name="Login/Submit" value="Login" />
    </form>
    </body>
    </html>
     

Diese Seite empfehlen