Markus: Passwortschutz

Hi Leute,

Wollte mal fragen, ob mir jemand einen Tipp liefern kann, wie ich einen wirksamen Passwortschutz erstellen kann. Wenn's geht, möglichst Dateibasierend. Oder kommt man bei einem wirksamen Schutz nicht um MySQL herum?
Also für einen Dateibasierenden hab' ich mir überlegt, ob man nicht eine Datei erstellen kann, die etwa so aussieht:~~~html

username1|@|passwort1
username2|@|passwort2
username3|@|passwort3
username4|@|passwort4

  
Und dass man die Datei dann in zwei verschiedene Arrays einliest. Die Werte getrennt durch "|@|" und "\r\n" oder so ähnlich. Und dass dann bei der Passwortabfrage verglichen wird, ob die Benutzernamen- und die Passwort-Eingabe den gleichen Array-Index haben.  
Ist sowas zu verwirklichen und auch wirksam? Wenn ja, wie? Oder brauch' ich was anderes?  
  
Um Antworten wär' ich sehr dankbar  
  
Markus
  1. Hi Markus,

    kennst du http://pear.php.net? Schau dir mal das Auth package an:
    http://pear.php.net/package/Auth.
    Solltest du keine Ahnung haben wie man mit diesen packages umgeht wende dich an http://www.pear-forum.de/.

    Grüsse,
    Lucien

  2. Hi,

    Ist sowas zu verwirklichen und auch wirksam? Wenn ja, wie? Oder brauch' ich was anderes?

    wenn du das ohne MySQL oder ein anderes DBMS machen willst solltest du
    die datei außerhalb des rootsverzeichnisses legen. oder in einen
    unterordner der mit .htaccess geschütz ist.

    Wenn sich die User nicht ändern oder eher selten, könntest du dies in einer .php datei machen mit folgendem code:

      
    <?  
    $benutzer = array()  
    $benutzer['benutzername1'] = passwort1;  
    $benutzer['benutzername2'] = passwort2;  
    ?>  
    
    

    und diese dann includen. wenn es aber öfters, oder gar automatisch zum hinzufügen neuer benutzer kommt soltlest du dier parse_ini_file()
    man anschauen, in den komments dazu steht auch schon die eine oder andere fertige "write_ini_file".

    MfG

    1. Hi Daniel,

      wenn du das ohne MySQL oder ein anderes DBMS machen willst solltest du
      die datei außerhalb des rootsverzeichnisses[1] legen. oder in einen
      unterordner der mit .htaccess geschütz ist.

      [1] Dokumentroot ;-)

      Ja, das ist wichtig, weil der ganze Schutz sonst umsonst ist. Alternativ
      könnte man die Datei auch einfach so bennenen, dass der Dateiname mit .ht
      beginnt. Dann gibt der Apache (in der Standard Konfiguration, wohlgemerkt)
      die Datei auch nicht raus.

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
      Wer die FAQ gelesen hat, ist klüger! ... und weiß wie man Links macht ;-)
  3. Γειά σου, Markus!

    Wollte mal fragen, ob mir jemand einen Tipp liefern kann, wie ich einen wirksamen Passwortschutz erstellen kann.

    Per HTTP-Authentifizierung.

    Wenn's geht, möglichst Dateibasierend. Oder kommt man bei einem wirksamen Schutz nicht um MySQL herum?

    MySQL hat mit einem Zugriffsschutz auf Webseiten absolut nichts zu tun, sondern bezeichnet nur eine Datenbankschnittstelle.

    Also für einen Dateibasierenden hab' ich mir überlegt, ob man nicht eine Datei erstellen kann, [...] Und dass dann bei der Passwortabfrage verglichen wird, ob die Benutzernamen- und die Passwort-Eingabe den gleichen Array-Index haben.
    Ist sowas zu verwirklichen und auch wirksam? Wenn ja, wie? Oder brauch' ich was anderes?

    Wenn es dir um einen reinen Zugriffsschutz geht und dir als Webserver ein entsprechend konfigurierter Apache zur Verfügung steht, kannst du dir das ausarbeiten einer Zugriffskontrolle per PHP sparen, da der Apache den benötigten Mechanismus von Haus aus mitbringt. Mehr Informationen dazu findest du z. B. in SELFHTML: Verzeichnisse und Dateien mit Passwort schützen.

    Пока!
    Sven aus Bonn

    --
    Do it yourSELF!
    Selfcode: ie:% fl:( br:> va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:) mo:} zu:) - Selfcode dekodieren - Selfcode-Info
    Athen rückt in Sichtweite. ;-)
    1. Hi Arx,

      Per HTTP-Authentifizierung.

      Wie funktioniert sowas? Sorry, bin aber anfänger

      Mehr Informationen dazu findest du z. B. in SELFHTML: Verzeichnisse und Dateien mit Passwort schützen.

      Was ich wollte, ist aber kein .HTACCESS sondern ein Passwortschutz, den ich selbst graphisch an meine HP anpassen kann!

      Markus

      1. Hi,

        Was ich wollte, ist aber kein .HTACCESS sondern ein Passwortschutz, den ich selbst graphisch an meine HP anpassen kann!

        dann suchst du wohl eher nach einer benutzerverwaltung, denn du
        sollttest nciht vergessen das du auch schauen solltest ob der, der sich
        die seite gerade ankuckt angemeldet ist, und wenn ja ob er das recht
        dazu hat.

        MfG

      2. Γειά σου, Markus!

        Per HTTP-Authentifizierung.

        Wie funktioniert sowas? Sorry, bin aber anfänger

        Über die Serverkonfiguration, also z. B. die von mir angesprochenen Verzeichnis-spezifischen .htaccess-Dateien.

        Mehr Informationen dazu findest du z. B. in SELFHTML: Verzeichnisse und Dateien mit Passwort schützen.

        Was ich wollte, ist aber kein .HTACCESS sondern ein Passwortschutz, den ich selbst graphisch an meine HP anpassen kann!

        Dann wirst du wohl doch selbst ein Script schreiben müssen. Zu der eingangs von dir angesprochenen Frage zur Speicherung der Nutzerdaten: Du hast viele Möglichkeiten:

        • Du kannst die Nutzerdaten in einer Textdatei ablegen, di du bei Bedarf einliest und verarbeitest.
        • Du könntest die Nutzerdaten in einem Array verwalten, das als ganzes in einer Datei gespeichert wird - Stichwort "Flatfiles"
        • Du kannst die Nutzerdaten in einer - ja, MySQL - Datenbank speichern.
        • ...

        Welche Methode du zur Datenspeicherung wählst, musst du nach Aufwand und Menge der zu speichernden Daten entscheiden.

        Пока!
        Sven aus Bonn

        --
        Do it yourSELF!
        Selfcode: ie:% fl:( br:> va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:) mo:} zu:) - Selfcode dekodieren - Selfcode-Info
        Athen rückt in Sichtweite. ;-)
        1. Hi,

          Zuerst mal Danke für die Antworten

          Welche Methode du zur Datenspeicherung wählst, musst du nach Aufwand und Menge der zu speichernden Daten entscheiden.

          Ich möchte eigentlich nur einen sehr kleinen Benutzerkreis einbauen vielleicht höchstens 10 Personen.

          • Du kannst die Nutzerdaten in einer Textdatei ablegen, di du bei Bedarf einliest und verarbeitest.

          Wie muss so eine Textdatei aufgebaut sein und wie lese ich sie in Arrays/wie lese ich sie sinnvoll aus?
          Geht das auf die von mir angesprochene Art?

            
          benutzer1|@|passwort1  
          benutzer2|@|passwort2  
          benutzer3|@|passwort3  
          benutzer4|@|passwort4  
          
          

          Mfg

          Markus

          1. Γειά σου, Markus!

            Welche Methode du zur Datenspeicherung wählst, musst du nach Aufwand und Menge der zu speichernden Daten entscheiden.

            Ich möchte eigentlich nur einen sehr kleinen Benutzerkreis einbauen vielleicht höchstens 10 Personen.

            Wenn es nur um so wenige Nutzer und ihre Daten geht, reichen eine einfache Textdatei oder ein Array, das du als ganzes in eine Datei schreibst, eigentlich aus. Letztere Methode hat den Vorteil, dass du keine Umwandlung von Text in ein Array bzw. umgekehrt vornehmen musst; siehe dazu auch den Link auf den Archiv-Thread, den ich dir gegeben habe.

            Пока!
            Sven aus Bonn

            --
            Do it yourSELF!
            Selfcode: ie:% fl:( br:> va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:) mo:} zu:) - Selfcode dekodieren - Selfcode-Info
            Athen rückt in Sichtweite. ;-)
            1. Hi,

              Ich würde es allerdings doch gerne so machen, dass die Datei in ein Array erst eingelesen und dann verarbeitet wird (Falls mal ein oder mehrere User dazukommen).
              Und du hast mir immmer noch nicht auf meine Frage geantwortet, ob das mit dem von mir vorgeschlagenen Dateiaufbau irgendwie funktioniert.
              Und wird das Passwort auch erkannt, wenn ich es mit base64 oder md5 verschlüssele?

              Gruß

              Markus

              1. Hi,

                Und du hast mir immmer noch nicht auf meine Frage geantwortet, ob das mit dem von mir vorgeschlagenen Dateiaufbau irgendwie funktioniert.

                solange du die datei richtig aussließt. bzw. die durch das lesen der
                datei ankommenden daten richtig verarbeitest ist das kein problem. Daher
                steht prinzipiel jeder erdenkliche dateiaufbau zur verfügung.

                Und wird das Passwort auch erkannt, wenn ich es mit base64 oder md5 verschlüssele?

                welches? das in der datei? ja, dann musst du vor dem prüfen aber das eingegebene noch wandeln.

                MfG

                1. Hi,

                  solange du die datei richtig aussließt. bzw. die durch das lesen der
                  datei ankommenden daten richtig verarbeitest ist das kein problem. Daher
                  steht prinzipiel jeder erdenkliche dateiaufbau zur verfügung.

                  Wie muss das denn aussehen?
                  Ich möchte es im Prinzip ja so, dass die einzelnen Zeilen durch "|@|" in Besucher und Passwort getrennt werden. Und die einzelnen Besucher werden durch Zeilenumbrüche getrennt. Wie schon vorher beschrieben!
                  Wie kann ich das in zwei verschiedene Arrays einlesen und diese dann verarbeiten!

                  Markus

                  1. Hi,

                    Wie muss das denn aussehen?

                    Kommt wie gesagt darauf an wie du das machen willst.

                    Ich möchte es im Prinzip ja so, dass die einzelnen Zeilen durch "|@|" in Besucher und Passwort getrennt werden. Und die einzelnen Besucher werden durch Zeilenumbrüche getrennt. Wie schon vorher beschrieben!
                    Wie kann ich das in zwei verschiedene Arrays einlesen und diese dann verarbeiten!

                    na da empfiehlt es sich doch die datei zeilenweise mit fgets()
                    Zeilenweise einzulesen. als länge einfach was mit 10000 oder so
                    angeben, solange wird die kombination pwd+benutzername nie sein. beim
                    eintrag musst du dann darauf achten das nur an dieser einen
                    gewünschten stelle das "|@|" steht. mit split() kannst du den dir
                    gegeben string dann nach username und pdw trennen.

                      
                    $z = 0;  
                    $dm = fopen(datei);  
                    while($zeile = fgets($dm, 1000000))  
                    {  
                      $daten = split("|@|", $zeile);  
                      benutzer[$z] = $daten[0];  
                      pwd[$z] = $daten[1];  
                      $z++;  
                    }  
                    
                    

                    solch einen code solltest du in etwa hinbekommen.

                    MfG

  4. Völlig unabhängig davon, wie Du die Passwörter speicherst, solltest Du selbige nicht im Klartext speichern, sondern deren md5-Summen.
    Näheres unter http://www.php.net/manual/de/function.md5.php

    1. Hi,

      Völlig unabhängig davon, wie Du die Passwörter speicherst, solltest Du selbige nicht im Klartext speichern, sondern deren md5-Summen.

      da kann ich nur bedingt zustimmen. auf alle fälle sollte er die datei in der die daten stehen wie ich hier schon angesprochen habe schützen.

      Warum ich nur bedingt sage? md5 ermittelt quasi die quersumme des
      stringes. denke du hast in mathe aufgepasst und weist das 111 und 12 die
      qleiche quersumme haben. daher muss jmd der sich als ein gewisser user
      ausgiebt garnicht das korekte pwd kennen.

      Näheres unter http://www.php.net/manual/de/function.md5.php

      so sieht ein link aus

      MfG

      1. echo $begrüßung;

        Warum ich nur bedingt sage? md5 ermittelt quasi die quersumme des
        stringes. denke du hast in mathe aufgepasst und weist das 111 und 12 die
        qleiche quersumme haben. daher muss jmd der sich als ein gewisser user
        ausgiebt garnicht das korekte pwd kennen.

        Wie hoch ist die Wahrscheinlichkeit, zwei Strings zu finden, die den gleichen md5-Wert haben? Und wie hoch schätzt du die Chancen ein, einen zweiten String zu finden, ohne an Rechenzeit/Traffic-Grenzen zu stoßen?

        echo "$verabschiedung $name";

        1. Hi,

          Wie hoch ist die Wahrscheinlichkeit, zwei Strings zu finden, die den gleichen md5-Wert haben?

          per zufall?

          Und wie hoch schätzt du die Chancen ein, einen zweiten String zu finden, ohne an Rechenzeit/Traffic-Grenzen zu stoßen?

          gleich null, ich habe einmal eine Anleitung im web gefunden um md5
          rückwärts durchzufüren. Da dies aber schon etwas länger her ist kann ich
          dir jetzt leider auf die schnelle keinen Link geben. wenn man sich
          damit etwas ausseinander setzt ist es kein problem einen string zu
          finden der diesen ebenfalls diesen Stringwert hat. daher sollte die
          datei, egal ob die passwörter verschlüsslt sind oder nicht, vor
          fremdzugriffen geschützt werden. und md5 biete da dann einen
          zusätzlichen schutz.

          MfG

          1. echo $begrüßung;

            Und wie hoch schätzt du die Chancen ein, einen zweiten String zu finden, ohne an Rechenzeit/Traffic-Grenzen zu stoßen?

            gleich null,

            eben...

            wenn man sich
            damit etwas ausseinander setzt ist es kein problem einen string zu
            finden der diesen ebenfalls diesen Stringwert hat.

            siehe dazu auch http://www.heise.de/newsticker/meldung/57038, besonders der letzte Abschnitt

            daher sollte die datei, egal ob die passwörter verschlüsslt sind oder nicht, vor
            fremdzugriffen geschützt werden.

            Dem stimme ich zu, aber ...

            und md5 biete da dann einen zusätzlichen schutz.

            ... meinst du wirklich das, was du geschrieben hast?

            Aus der gesamten Datei, in der die Passwörter (wie auch immer - Klartext oder irgendwie anders) stehen, einen md5-Hashwert zu bilden ist kontraproduktiv. Da sich der nicht wieder zurückrechnen lässt kommst du an die einzelnen Passwörter nicht mehr ran.

            echo "$verabschiedung $name";

            1. Hi,

              und md5 biete da dann einen zusätzlichen schutz.
              ... meinst du wirklich das, was du geschrieben hast?

              jain, ich seh das erstmal allgemein:
              kein schutz der datei -> pwd mit md5() verschlüsseln.
              schutz der datei -> pwd im klartext.

              Ist der Schutz der datei ansich nicht aussreichend und man könnte unter
              gewissen umständen doch an sie herankommen wäre es sinnvoll beides zu
              kombinieren. das falls einer dann doch an die datei kommt die pwds nicht
              gleich im klartext vorliegen hat.
              ist der schutz ausreichend um diesen fall ausschließen zu können ist es
              natürlich sicherer die pwds im klartext dort stehen zu haben

              MfG