Ankündigung

Einklappen
Keine Ankündigung bisher.

.htpasswd (im geschützten Ordner!) per skript ändern!

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • .htpasswd (im geschützten Ordner!) per skript ändern!

    HI!

    Habe ein skript das mir die .htpasswd Datei im per .htaccess geschützten Ordner (meineseite/members/.htpasswd) ändern soll!
    das skript das die .htpasswd Datei öffnet liegt außerhalb des Ordners members (meineseite/passwort_change.php)!
    Wenn jetzt ein neuer Besucher sich für die Members Area anmelden will und dieses skript aufruft, erscheint die fehlermeldung:
    "Warning: fopen(members/.htpasswd): failed to open stream: Permission denied in /meineseite/passwort_change.php on line 40"!

    In line 40 steht der Befehl:
    Code:
    $datei=fopen($pwddatei,"w");
    der die .htpasswd zum schreiben öffnen sollte!

    die Rechte von .htpasswd sind auf vollen Zugriff gesetzt!

    Vermute mal das Problem liegt darin, das ich auf die im Geschützten Bereich liegende Datei zugreife, ohne mich angemeldet zu haben!
    in der Members Area funktioniert das skript jedenfalls einwandfrei!

    Wie kann ich es realisieren das ich per script (das außerhalb des geschützen Bereiches liegt!), eben genau diese Datei ändern kann???

    gibts da ne möglichkeit???

    Kann mich ja nicht jedesmal selber einloggen um das passwort manuell zu ändern! Und der neue Benutzer eben auch nicht da seine Anmeldedaten garnicht in der .htpasswd eingetragen werden können????

    Für eine Lösung wäre ich sehr dankbar!???

    MFG Funky_

  • #2
    Machs ohne .htaccess und direkt über PHP:
    http://de.php.net/manual/de/features.http-auth.php

    Kommentar


    • #3
      Und wie sicher ist das ganze ohne htaccess?

      Gibts da keine möglichkeit die datei zu ändern????

      Kommentar


      • #4
        Ob die HTTP-Authentifizierung über htaccess oder PHP erfolgt ist egal.

        Wenn du mit PHP allerdings htaccess-Dateien schreiben willst, kannst du noch viel mehr Unheil anrichten, als wenn "nur" deine Authentifizierung nicht klappt.
        Außerdem gibts auf der Seite haufenweise Lektüre und Code-Beispiele.

        Kommentar


        • #5
          OK das ist ja schön und gut, aber auf die art und weise muss ich dann ein tabelle verwenden die das Passwort und Nutzernamen speichert!

          Das problem ist das ich einzelne Ordner die zum Beispiel Private Pics enthalten dadurch nicht schützen kann! Die Prüfung ob sich jemand eingeloggt hat, funktioniert zwar auf den einzelnen pages, aber eine JPG Datei in einem Unterordner ist dadurch nicht geschützt und kann problemlos angesprochen werden!??

          Wie kann ich das verhindern???

          Genau das ist der Grund warum ich .htaccess verwenden wollte! Hier wird der komplette Ordner geschützt und nicht nur die einzelnen Pages!

          Kommentar


          • #6
            Re: .htpasswd (im geschützten Ordner!) per skript ändern!

            Zitat von Funky_
            Habe ein skript das mir die .htpasswd Datei im per .htaccess geschützten Ordner (meineseite/members/.htpasswd) ändern soll!
            a. wie sieht das Script aus?
            b. warum verwendest Du keine korrekten Pfade?

            ..., erscheint die fehlermeldung:
            "Warning: fopen(members/.htpasswd): failed to open stream: Permission denied in /meineseite/passwort_change.php on line 40"!

            die Rechte von .htpasswd sind auf vollen Zugriff gesetzt!
            c. welche Rechte hat das Verzeichnis und welche Rechte hat die Datei?
            d. "voller Zugriff" ist Unfug. Hoffentlich hat die Kundschaft keinen FTP Zugriff.

            gibts da ne möglichkeit???
            Ja, wenn Du die Fragen a bis d beantwortet hast.

            Kommentar


            • #7
              Schau Dir mal bei pear.php.net File_HtAccess an.
              http://pear.php.net/package/File_HtAccess

              Kommentar


              • #8
                OK!

                Zu Punkt a:

                So sieht das Skript aus:

                [setze-passwort.php]:

                Code:
                <?php
                // Passwort Funktion
                function setze_passwort($pwddatei,$nutzer,$nutzer_pwd="") {
                if (empty($nutzer) || empty($pwddatei) || strlen($nutzer)<3) {
                return false;
                }
                if (file_exists($pwddatei)) {
                $pwd=file($pwddatei);
                } else {
                $pwd=array();
                }
                // Neue Passwort Variable initialisieren
                $neu_pwd="";
                // Sämtliche Nutzer durchlaufen
                foreach($pwd as $eintrag) {
                if (strstr($eintrag,$nutzer.":")==$eintrag) {
                $change_nutzer=true;
                if (empty($nutzer_pwd)) {
                continue;
                }
                $neu_pwd.=
                $nutzer.":".crypt($nutzer_pwd,$nutzer[2].$nutzer[1])."\n";
                } else {
                $neu_pwd.=trim($eintrag)."\n";
                }
                }
                // Nutzer neues Passwort zuweisen
                if (!isset($change_nutzer)) {
                if (empty($nutzer_pwd)) {
                return false;
                } else {
                $neu_pwd.=
                $nutzer.":".crypt($nutzer_pwd,$nutzer[2].$nutzer[1])."\n";
                }
                }
                // Daten sichern
                $datei=fopen($pwddatei,"w");
                if (is_resource($datei)) {
                flock($datei,LOCK_EX);
                fwrite($datei,$neu_pwd);
                flock($datei,LOCK_UN);
                fclose($datei);
                return true;
                } else {
                return false;
                }
                }
                ?>
                Aufgerufen wird es, um einen neuen Nutzer einzutragen, über eine Include Anweisung aus folgender Datei:

                [anmeldung.php]:

                Code:
                <?php
                session_start();
                
                $passwd = "";
                $menge = rand(5,10);
                $pass = array($menge);
                
                for ($i = 0; $i <= ($menge - 1); $i++) {
                   $grossKlein = rand(1,2);
                   if ($grossKlein == 1) 
                       {
                        $nmr = rand(97,121);
                        }
                        else 
                        {
                        $nmr = rand(65,90);
                        }
                        
                 
                $pass[$i] = chr($nmr);
                }
                
                for($i = 0; $i <= ($menge -1); $i++) { 
                  $passwd =  $passwd.$pass[$i];
                  }
                
                $email = $_POST['email'];
                $benutzer = $_POST['nickname'];
                $passwort = $passwd;
                
                include("setze-passwort.php");
                if (setze_passwort("../../members/.htpasswd",$benutzer,$passwort)) {echo "Anmeldung erfolgreich!"; } else { echo "Anmeldung fehlgeschlagen!"; };
                
                echo "
                ";
                
                if (mail($email,"Anmeldung auf Funk-Electric.de","Benutzer: ".$benutzer." Passwort: ".$passwort)) {echo "E-Mail erfolgreich versand!"; } else { echo "E-Mail Versand fehlgeschlagen!"; };
                ?>
                Über Session Variablen werden aus einem Formular heraus, die nötigen Daten für die E-Mailadresse, Nickname... an <anmeldung.php> übermittelt!

                Das Skript kreiert per Zufall ein Passwort, das an die entsprechende E-Mailadresse gesendet wird.
                Außerdem ruft es per include Anweisung, das zweite Skript <setze-passwort.php> auf, welches das kreierte Passwort und den übergebenen Nickname in die .htpasswd schreibt.


                Zu Punkt b:

                Korrekte Pfade:

                [anmeldung.php] skripte/anmeldung/anmeldung.php

                [setze-passwort.php] skripte/anmeldung/setze-passwort.php

                [formular_anmeldung.php] frames/inhalt/formular_anmeldung.php

                und die .htaccess und .htpasswd Datei liegt unter:

                members/.htaccess

                bzw.:

                members/.htpasswd



                Zu Punkt c:

                Rechte:

                Die Datei hat volle Rechte (777)! weiß ja das das nicht sein muss aber um dahergehende Fehler auszuschließen hab ich sie dementsprechend gesetzt!

                Das Verzeichnis (755).



                Zu Punkt d:

                Is wirklich unsinn, stimm ich dir zu aber kenn mich mit der Rechteverteilung nicht so aus deswegen hab ich sie mal hochgesetzt weil ich dachte der Fehler liegt evtl. daran!
                Und das ganze läuft momentan eh nur zum test im Unterverzeichnis meines Servers, von daher kann da eigentlich noch nicht viel passieren!

                Ahja meine PHPverion ist: 4.4.2

                So ich denke das reicht als info oder?

                Naja auf jedenfall funktioniert das ganze so nicht!
                Wie kann ich das lösen????
                Weis jemand Rat?


                PS.:

                Zu Bruchpilot:

                Der Link: http://pear.php.net/package/File_HtAccess funktioniert leider nicht!

                Kommentar


                • #9
                  Zitat von Funky_
                  OK!
                  Fein.

                  Das Script gucke ich mir später mal an. Bin mal gespannt, ob Du die Paßwörter richtig codiert hast und ob das Zeilenende auch ganz sicher ein \n ist.

                  Erst mal das:

                  Korrekte Pfade:
                  und die .htaccess und .htpasswd Datei liegt unter:
                  members/.htaccess

                  bzw.:

                  members/.htpasswd
                  Das sind unter Linux keine korrekten Pfade. Entweder man bezieht sich auf die Wurzel oder auf das aktuelle Verzeichnis.

                  Im .htaccess File muß Du eh den absoluten Pfad zum .htpasswd eintragen. Sonst meckert der.

                  Zu Punkt c:
                  Rechte:

                  Die Datei hat volle Rechte (777)! weiß ja das das nicht sein muss aber um dahergehende Fehler auszuschließen hab ich sie dementsprechend gesetzt!

                  Das Verzeichnis (755).
                  Beides falsch. Das Verzeichnis muß zwingend auf 0777 gesetzt werden, weil sonst der Apache dort nix schreiben darf. Deshalb funktioniert Dein Script ja nicht.

                  Das File muß auf 0666 gesetzt werden, weil es weder ausführbar noch ein
                  Verzeichnis ist.

                  Ahja meine PHPverion ist: 4.4.2
                  So ich denke das reicht als info oder?
                  Ja.

                  Ich jetzt gucke ich mir das Script an, ob Du auch wirklich das beachtet hast:
                  http://de2.php.net/crypt -> Example 3. Using crypt() with different encryption types

                  Derf Apache erwartet nämlich verschlüsselte Paßwörter.
                  Der Link: http://pear.php.net/package/File_HtAccess funktioniert leider nicht!
                  Sowas kommt auch bei php.net mal vor, daß die Kiste gerade mal gewartet oder sonstwas wird.

                  Kommentar

                  Lädt...
                  X