HTACCESS mit MySQL verbinden

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

  • #31
    empty() is_null() blick ins manual!

    Kommentar


    • #32
      wenn eine Variable NULL ist bzw. wenn sie nicht gesetzt ist, dann ist !isset($variable) = true
      wenn sie jedoch leer bzw. '' ist, dann ist empty($variable) = true
      hopka.net!

      Kommentar


      • #33
        So, ich hab das jetzt nochmal überprüft. Wenn die Variablen nicht gesetzt sind, dann kommt der Login. Schicke ich dann ein leeres Login ab, dann ist die Variable zwar gesetzt, aber leer.

        Ich müsste also erreichen, dass die Variable irgendwie gelöscht wird; mir unset() funktioniert es ja wie bereits festgestellt nicht. Wie kann ich es also erreichen, dass die Umgebungsvariablen gelöscht werden?

        Kommentar


        • #34
          Original geschrieben von Tomcat Chriss
          So, ich hab das jetzt nochmal überprüft. Wenn die Variablen nicht gesetzt sind, dann kommt der Login. Schicke ich dann ein leeres Login ab, dann ist die Variable zwar gesetzt, aber leer.

          Ich müsste also erreichen, dass die Variable irgendwie gelöscht wird; mir unset() funktioniert es ja wie bereits festgestellt nicht. Wie kann ich es also erreichen, dass die Umgebungsvariablen gelöscht werden?
          natürlich kann unset nicht funktionieren. das löscht variablen in deinem script, aber wenn das script erneut aufgerufen wird, hat das logischweise keine wirkung mehr.

          sieht so aus, als ob dein browser dann beim zweiten scriptaufruf diese leeren variablen erneut überträgt.

          ich nehme mal an, du bist nach dem serten beispiel auf der seite über http-auth im manual vorgegangen?

          dort wird ja zunächst mal nur abgeprüft, ob überhaupt zugangsdaten eingegeben wurden - falls diese falsch sein sollten, musst du natürlich ebenfalls die beiden header (authenticate und 401) erneut ausgeben ...
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #35
            Hallo Wahsaga,

            Ja, genau in meinem Script wird zunächst überprüft, ob die Variablen gesetzt sind. Sind diese nicht gesetzt, dann werden die beiden Header (Authenticate und 401) aufgerufen. Der 401 wird aufgerufen, wenn man das Formular mit Cancel abbricht.

            Wird OK gedrückt, werden die variablen gesetzt, egal ob das Formular gefüllt wurde oder nicht. Das ist genau das Problem. Ich überprüfe als nächstes, ob die Zugangsdaten mit den Daten in der Datenbank übereinstimmen.

            Wenn das der Fall ist, soll er die index.php aufrufen, andernfalls sollen die Variablen gelöscht werden und das Script neu aufgerufen werden.

            Auf php.net stand, dass die Variablen durch erneutes senden des Headers 401 gelöscht werden könnten, aber das funktioniert auch nicht. Und so wie ich das mit meinem bisschen englisch ersehen kann, gibt es da wohl viele Probleme mit, wie aus dem php.net-Forum zu ersehen ist.

            Es muss doch möglich sein, diese blöden Vriablen zu löschen.

            EDIT:

            Ich habe es gerade nochmal probiert und habe nach dem Login folgendes eingebunden, wenn ein leeres Formular gesendet wird:
            PHP-Code:
            if (empty ($_SERVER['PHP_AUTH_USER']))
            {
               
            Header("HTTP/1.0 401 Unauthorized");
               echo 
            "Sie müssen gültige Benutzerdaten eingeben, um die Seite zu betreten.\n";
               
            login();

            Da ist es jetzt so, dass die Variablen über den Header 401 nicht gelöscht werden und er in eine Endlosschleife läuft, bis der Browser die Seite nicht mehr darstellen kann. Er wirft mir also zig mal die Fehlermeldung raus.

            Zuletzt geändert von Tomcat Chriss; 30.12.2003, 13:48.

            Kommentar


            • #36
              Ich hab in Script gefunden, mit dem das besser zu funktionieren scheint. Er authorisiert mich jetzt allerdings nicht mehr, auch wenn die Zugangsdaten korrekt sind.

              Woran kann das liegen? Hier das neue Script:
              PHP-Code:
              <?php 

              $auth 
              false// Assume user is not authenticated 

              if (isset( $_SERVER['PHP_AUTH_USER'] ) && isset($_SERVER['PHP_AUTH_PW'])) { 

                  include(
              "includes/connect.inc.php");
                  
                  
              $password MD5($_SERVER['PHP_AUTH_PW']);
                  
              $uname $_SERVER['PHP_AUTH_USER'];
                 
              $sql "SELECT * FROM nuke_users WHERE uname = '$uname' AND pass = '$password'"

                  
              // Execute the query and put results in $result 

                  
              $result mysql_query$sql 
                      or die ( 
              'Unable to execute query.' ); 

                  
              // Get number of rows in $result. 

                  
              $num mysql_numrows$result ); 

                  if ( 
              $num != ) { 

                      
              // A matching row was found - the user is authenticated. 

                      
              $auth true

                  } 



              if ( ! 
              $auth ) { 

                  
              header'WWW-Authenticate: Basic realm="Private"' ); 
                  
              header'HTTP/1.0 401 Unauthorized' ); 
                  echo 
              'Authorization Required.'
                  exit; 

              } else { 

                  echo 
              '<P>You are authorized!</P>'


              ?>
              Danke, Chriss

              Kommentar


              • #37
                O.K. habs, das Script funzt.

                Gruß, Chriss

                Kommentar


                • #38
                  Original geschrieben von Tomcat Chriss
                  O.K. habs, das Script funzt.
                  sagst du bitte noch kurz was zur lösung, bzw. der (denk-)fehler lag?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #39
                    Hmm, also soweit ich das aus dem Script ersehen kann, wird erstmal die Variable $auth auf false gesetzt, was zur Folge hat, dass erstmal davon ausgegangen wird, dass der User nicht authentifiziert ist.

                    Als nächstes wird überhaupt bevor die Authentifizierung aufgerufen wird schon erst einmal überprüft, ob die Variablen existieren.

                    Wenn diese existieren, werden diese mit der Datenbank abgeglichen. Wenn der Benutzer in der Datenbank vorhanden ist, wird die Variable $auth auf true gesetzt, falls der User nicht in der Datenbank ist,

                    Im nächsten Schritt wird überprüft, welchen Status die Variable $auth hat. Ist diese auf true gesetzt, dann wird "You are authorized" ausgegeben und alles ist wunderbar.

                    Ist die Variable allerdings noch auf false gesetzt, dann wird die Authentifizierung aufgerufen.

                    Tja weiter verstehe ich das Script noch nicht so ganz, denn er hat sogar einen Counter, wenn dreimal die falschen Daten eingegeben wurden, dann wird die Verarbeitung abgebrochen und es wird "Authorization required" ausgegeben.

                    Kann es evtl. sein, dass diese Variable $auth auch eine Systemvariable ist? Bei php.net hab ich jedenfalls nichts dazu gefunden.

                    Ich denke, ich bin jetzt auch nicht unbedingt der King im auseinandernehmen von fremden Quelltexten. Dieses habe ich jedenfalls von zend.com. In diesem Tutorial wird das ganze eigentlich Step-by-Step erklärt, auch wie man es ohne Datenbank realisieren kann.

                    Gruß, Chriss

                    Kommentar


                    • #40
                      Original geschrieben von Tomcat Chriss
                      Kann es evtl. sein, dass diese Variable $auth auch eine Systemvariable ist? Bei php.net hab ich jedenfalls nichts dazu gefunden.
                      nein, das ist eine ganz normale variable, die hier nur als flag benutzt wird, um zu entscheiden, ob nachher die meldung, dass der user authentifiziert ist, ausgegeben werden soll, oder nochmals die header.
                      Tja weiter verstehe ich das Script noch nicht so ganz, denn er hat sogar einen Counter, wenn dreimal die falschen Daten eingegeben wurden, dann wird die Verarbeitung abgebrochen und es wird "Authorization required" ausgegeben.
                      standard-verhalten bei HTTP-AUTH über .htaccess ist, dass du drei versuche hast, dich mit den richtigen daten zu authentifizieren, danach kommt ein 403 forbidden fehler.

                      dieser zähler versucht diesen mechanismus nur nachzubilden, da du andernfalls mit der php-methode immer wieder nur den 401 mit erneuter aufforderung zur eingabe der richtigen zugangsdaten bekommen würdest.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #41
                        Dann wird das aber das Standardverhalten sein, denn ich kann in dem gesammten Script nichts finden, dass auch nur annähernd nach einem Zähler aussieht.

                        Mal noch was zur weiteren Vorgehensweise. Es ist zwar schön, dass das Script jetzt endlich funktioniert. Allerdings könnte ich so das Script nur direkt verlinken und somit bestenfalls eine PHP-Anwendung dahinter schützen.

                        Bisher war es jedoch so, dass mit der .htaccess das komplette Verzeichnis inkl. Unterverzeichnisse und aller Dateien geschützt wurde. Kann ich über die .htaccess festlegen, dass für die Authentifizierung dieses Script angesprochen werden soll?

                        Kommentar


                        • #42
                          Original geschrieben von Tomcat Chriss
                          Bisher war es jedoch so, dass mit der .htaccess das komplette Verzeichnis inkl. Unterverzeichnisse und aller Dateien geschützt wurde. Kann ich über die .htaccess festlegen, dass für die Authentifizierung dieses Script angesprochen werden soll?
                          jetzt drehen wir uns aber ein wenig im kreis, hm?

                          dass das generell nur mit mod_auth funktioniert, hatten wir ja am anfang schon ...


                          wenn du das so haben willst, dann müsstest du alle dateien in ein extra geschütztes verzeichnis legen, und dann ein php-script machen, das diese dateien übers dateinsystem ausliest und an den client weiterleitet - nachdem sich dieser beim php-script ordnungsgemäß authentifiziert hat.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #43
                            Sorry, falscher Thread. Ich habe diese Lösung hier mittlerweile verworfen. Dieses Posting gehört eigentlich zum Thread Passwortverschlüsselung in .htpasswd

                            Nochmal sorry, Chriss
                            Ich glaub fast, jetzt wird's einfach ein bisschen zu kompliziert. Das Portal liegt bereits in einem extra Verzeichnis. Ex befindet sich auch schon eine htaccess und eine htpasswd in diesem Verzeichnis.

                            Damit ist schion erreicht, dass das Verzeichnis samt Unterdateien geschüttzt sind, denn sobald von außerhalb eine der Dateien angefasst wird, wird die Authentifizierung aufgerufen.

                            Das ist so schon voll und ganz ausreichend. Es geht jetzt lediglich darum, dass jetzt ein PHP-basiertes CMS dahintersitzt, dass ein Forum, eine persönliche Begrüßung und private Messages unterstützt.

                            Bisher hatten alle Fachhändler ein und das selbe Login, jetuzt sollen Sie persönlich begrüßt werden und eine eindeutige Bezeichnung im Portal und im Forum haben. Deswegen müssen sich sich mit eigenen Daten authentifizieren. Das müssten Sie beim Forum, beim Portal und auch beim Betreten des Verzeichnisses tun, das will ich auf einmal einloggen beschränken.

                            Wenn überall das gleich Login verwendet wird, dann kann ich das auch realisieren. Mit dem Portal und dem Forum geht es ja auch schon. Die gleichen Daten möchte ich jetzt noch beim htaccess-Login verwenden. Dazu möchte ich, dass bei der Registrierung das Passwort und der Username noch einmal in der htpasswd gespeichert werden.

                            Dazu muss ich auf das Serverscript /usr/bin/htpasswd zugreifen und die Ausgabe des Scriptes möchte ich in die htpasswd speichern. Anhand der Servervariable REMOTE_USER wird dann der User im Portal und Forum eingeloggt.

                            Bitte, nicht so kompliziert denken. Ich möchte nur wissen, wie ich das Serverscript ausführe und die Rückgabe in die Datei speichern kann. Das Speichern ist hierbei auch noch noicht das Problem, sondern das Ausführen des serverseitigen Scriptes.

                            Danke, Chriss
                            Zuletzt geändert von Tomcat Chriss; 31.12.2003, 17:55.

                            Kommentar

                            Lädt...
                            X