tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
22
ZUGRIFFE
1215
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    tuccain tuccain ist offline Mitglied Bronze
    Registriert seit
    Feb 2002
    Beiträge
    30
    hola,

    ich habe folgendes problem:

    für einen geschützten bereich möchte ich die htacces-daten (user & pass) in ein html-formular eingeben und dann wahrscheinlich am besten via javascript eine popup-seite des geschützten bereichs öffen.

    wie müsste der code aussehen? hab schon mehrmals was versucht aber leider ohne erfolg.

    danke
    tuccain
     

  2. #2
    rootssw rootssw ist offline Mitglied Platin
    Registriert seit
    Aug 2003
    Beiträge
    593
    oder
    Da findest du bestimmt was.
     
    <?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>

  3. #3
    tuccain tuccain ist offline Mitglied Bronze
    Registriert seit
    Feb 2002
    Beiträge
    30
    wie gesagt, ich habs nicht ganz hinbekommen, das ist u.a. der grund weshalb ich hier danach frage...

    trotzdem danke
     

  4. #4
    rootssw rootssw ist offline Mitglied Platin
    Registriert seit
    Aug 2003
    Beiträge
    593
    Nagut.
    Aber die Beschreibung ist vielleicht etwas dürftig.
    Was genau soll gemacht werden? Willst du, dass man die Daten in die Datei .htaccess (bzw. .htpasswd) per HTML-Formular eingeben kann, und diese dann in der Datei gespeichert werden sollen, oder sollen die Daten nur zur Anmeldung ausgelesen werden?
     
    <?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>

  5. #5
    tuccain tuccain ist offline Mitglied Bronze
    Registriert seit
    Feb 2002
    Beiträge
    30
    ich brauche sie nur für die anmeldung.
     

  6. #6
    rootssw rootssw ist offline Mitglied Platin
    Registriert seit
    Aug 2003
    Beiträge
    593
    Da bin ich wieder.
    Ich hab' eben (auf die Schnelle) ein Script geschrieben, dass deiner erforderlichen Funktionalität entsprechen sollte.
    Sollte besser auch noch sauberer programmiert (z. B. nicht soviele Schleifen, ...) werden, aber darauf kommt es erstmal nicht an.

    Ich hab's auch gleich getestet, (hab' 2 Namen in der .htpasswd).
    Du musst das Script natürlich auch noch umschreiben, jenachdem, welche Crypt-String du übergeben hast (bei mir wars ja 21) und wo deine .htpasswd-Datei liegt.

    Hier nun der Quellcode:

    PHP-Code:
    <?php
    if (isset($_POST['Name']) AND isset($_POST['Password'])) {
        
    $pwfile file(".htpasswd");
        
    $Pass crypt($Password"21");
        
    $user_OK false;

        foreach (
    $pwfile as $zeile) {
            
    $LoginData[] = explode(":"$zeile);
        }
        for (
    $i 0$i count($LoginData); $i++) {
            if ((
    $_POST['Name'] == $LoginData[$i][0]) AND $Pass == $LoginData[$i][1]) {
                
    $user_OK true;
                break;
            }
            else {
    $user_OK false;}
        }
        if (
    $user_OK == true) {
            echo 
    "Login erfolgreich!<BR><BR><BR>";
            echo 
    "<A HRef=\"javascript:window.open('file.php', 'Admin')\">Hier geht's weiter</A>";
        }
        else {
            echo 
    "Login nicht erfolgreich!<BR><BR><BR>";
            echo 
    "<A HRef=\"javascript:history.back()\">Hier geht's zurück</A>";        
        }
    }
    else {
        echo 
    "<HTML><Body><Form Name=\"Login\" Method=\"POST\" Action=\"$PHP_SELF\">"
                
    ."<Input Type=\"Text\" Name=\"Name\"><BR><Input Type=\"Password\" Name=\"Password\"><BR>"
                
    ."<Input Type=\"Submit\" Value=\"Login\"></Form></Body></HTML>";
    }
    ?>
    Das "java script" musst du natürlich zusammen schreiben (wird vom Forum automatisch auseinander geschrieben).
    Wenn's Fehler geben sollte, bitte melden!
     
    <?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>

  7. #7
    rootssw rootssw ist offline Mitglied Platin
    Registriert seit
    Aug 2003
    Beiträge
    593
    OK, ich hab' 'nen Fehler entdeckt:

    Wenn ich mich mit dem ersten Namen/Passwort aus der .htpasswd anmelden will, sagt mir das Script, dass die Daten falsch sind, beim zweiten Namen funktioniert alles wunderbar.
    Wenn ich die Login-Daten und die Daten der .htpasswd aber per echo $Pass und echo $LoginData[$i][1] ausgeben lasse, sind diese absolut identisch!
    Von der If-Abfrage weiss ich aber (ich hab' mal nur den Namens-vergleich stehen gelassen), dass das an dem Password liegen muss!

    Wie kann das sein
     
    <?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>

  8. #8
    rootssw rootssw ist offline Mitglied Platin
    Registriert seit
    Aug 2003
    Beiträge
    593
    Ich weiss zwar immernoch nicht, woran das liegt, aber ich hab's so umgeschrieben, dass es funktioniert:

    PHP-Code:
    <?php
    if (isset($_POST['Name']) AND isset($_POST['Password'])) {
        
    $pwfile file(".htpasswd");
        
    $Pass crypt($Password'21');
        
    $user_OK false;

        foreach (
    $pwfile as $zeile) {
            
    $a strpos($zeile":");
            
    $fName substr($zeile0$a);
            
    $fPassword substr($zeile$a 113);
            
            if (
    $_POST['Name'] == $fName AND $Pass == $fPassword) {
                
    $user_OK true;
                break;
            }
            else {
    $user_OK false;}
        }
        if (
    $user_OK == true) {
            echo 
    "Login erfolgreich!<BR><BR><BR>";
            echo 
    "<A HRef=\"javascript:window.open('file.php', 'Admin')\">Hier geht's weiter</A>";
        }
        else {
            echo 
    "Login nicht erfolgreich!<BR><BR><BR>";
            echo 
    "<A HRef=\"javascript:history.back()\">Hier geht's zurück</A>";        
        }
    }
    else {
        echo 
    "<HTML><Body><Form Name=\"Login\" Method=\"POST\" Action=\"$PHP_SELF\">"
                
    ."<Input Type=\"Text\" Name=\"Name\"><BR><Input Type=\"Password\" Name=\"Password\"><BR>"
                
    ."<Input Type=\"Submit\" Value=\"Login\"></Form></Body></HTML>";
    }
    ?>

    Hat denn jemand 'ne Ahnung, wo der Fehler beim ersten Script war?!
     
    <?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>

  9. #9
    Avatar von SonicBe@m
    SonicBe@m SonicBe@m ist offline Mitglied Brokat
    Registriert seit
    Jan 2002
    Ort
    München
    Beiträge
    447
    PHP-Code:
    foreach ($pwfile as $zeile) {
            
    $LoginData[] = explode(":"$zeile);
        }
        for (
    $i 0$i count($LoginData); $i++) {
            if ((
    $_POST['Name'] == $LoginData[$i][0]) AND $Pass == $LoginData[$i][1]) {
                
    $user_OK true;
                break;
            } 
    wäre mir neu wenn du ein Multidimensionales Array erhalten würdest wenn du nen Explode aufrufst

    PHP-Code:
            if (($_POST['Name'] == $LoginData[$i][0]) AND $Pass == $LoginData[$i][1]) { 
    Und was ich eigentlich noch wenniger verstehe
    Wieso lest ihr mit Php ein ht File aus ?

    http://selfhtml.teamone.de/diverses/htaccess.htm

    nebenbei brauchst php evt. nur zur erstellung eines neuen Users... aber nicht zur Abfrage!
    Geändert von SonicBe@m (22.09.03 um 10:56 Uhr)
     
    Moep :)

  10. #10
    rootssw rootssw ist offline Mitglied Platin
    Registriert seit
    Aug 2003
    Beiträge
    593
    Dann erzähl ich dir mal was neues, es ist so!
    Ich hab' nämlich mal print_r($LoginData) ausgeführt und, siehe da - ein Multi-Array.
    Außerdem, ich habe die werte des gecrypteten Posts und den Wert von $Logindata[$i][1] per Echo miteinander verglichen, es stand auch der richtige und damit meine ich EXAKT DER GLEICHE Wert drin (es sei denn, ich kann nicht richtig lesen).
    Und als ich in der if-Abfrage den Vergleich des Passwortes weg liess (also nur noch der Benutzername verglichen wurde), kam immer die Meldung Login erfolgreich!

    Das mit dem -warum gerade .htaccess mit php auslesen- ist mir auch schon aufgefallen - macht wirklich nicht viel sinn, wenn die .htaccess im selben Verzeichnis liegt. Aber tuccain hat ja nicht nach dem Sinn, sondern nach einer Lösung gefragt!
     
    <?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>

  11. #11
    rootssw rootssw ist offline Mitglied Platin
    Registriert seit
    Aug 2003
    Beiträge
    593
    Da ich schon absehen kann, dass du mir nicht glaubst, kannst du ja mal folgenden Link ausprobieren:

    http://www.nasicunion.de/tutor/login.php

    Der PHP-Code lautet:

    PHP-Code:
    <?php
    if (isset($_POST['Name']) AND isset($_POST['Password'])) {
        
    $pwfile file(".htpasswd");
        
    $Pass crypt($Password"21");
        echo 
    "<br>Ihr eingegebenes Passwort lautet verschlüsselt:";
        echo 
    $Pass;
        echo 
    "<BR>";
        
    $user_OK false;

        foreach (
    $pwfile as $zeile) {
            
    $LoginData[] = explode(":"$zeile);
        }
        for (
    $i 0$i count($LoginData); $i++) {
            if ((
    $_POST['Name'] == $LoginData[$i][0]) AND $Pass == $LoginData[$i][1]) {
                
    $user_OK true;
                break;
            }
            else {
                echo 
    "<BR>Der Verleich mit den Login-Daten Nr. ".($i 1);
                echo 
    " war nicht erfolgreich!<BR>";
                echo 
    "Das erforderliche Password hieße:".$LoginData[$i][1]."<BR>";
                echo 
    "Der erforderliche Username hieße:".$LoginData[$i][0]."<BR>";
                
    $user_OK false;
            }
        }
        if (
    $user_OK == true) {
            echo 
    "Login erfolgreich!<BR><BR><BR>";
            echo 
    "<A HRef=\"javascript:window.open('file.php', 'Admin')\">Hier geht's weiter</A>";
        }
        else {
            echo 
    "Login nicht erfolgreich!<BR><BR><BR>";
            echo 
    "<A HRef=\"javascript:history.back()\">Hier geht's zurück</A>";        
        }
    }
    else {
        echo 
    "<HTML><Body>Bitte geben Sie als Name und Passwort 'test' oder 'hallo' ein!<Form Name=\"Login\" Method=\"POST\" Action=\"$PHP_SELF\">"
                
    ."Name:        <Input Type=\"Text\" Name=\"Name\"><BR>Passwort:    <Input Type=\"Password\" Name=\"Password\"><BR>"
                
    ."<Input Type=\"Submit\" Value=\"Login\"></Form></Body></HTML>";
    }
    ?>
    Die Datei .htpasswd, die im selben Verzeichnis liegt sieht so aus:
    test:21CAplOLEsGLE
    hallo:21bug8oWWKwEI
    Keine Leerzeichen/Leerzeilen oder sonstwas.
    Hab' ich da jetzt nur einen dämlichen Fehler gemacht, oder warum ist die verschlüsselte Ausgabe des Passwortes absolut identisch, wird aber nicht als dieses erkannt?!
    Das gilt, wie gesagt, nur beim ersten Namen (also test).
    Wenn man hallo eingibt, ist das Passwort zwar auch gleich, dieses wird aber erkannt.
     
    <?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>

  12. #12
    tuccain tuccain ist offline Mitglied Bronze
    Registriert seit
    Feb 2002
    Beiträge
    30
    So, erstmal vielen Dank an rootssw!

    Aber es hat bei mir nicht ganz geklappt, denn obwohl User und Passwort korrekt sind und ich demnach eingeloggt bin, kommt beim Aufrufen der geschützten Seite das Popup-Browserfenster für die erneute Eingabe der Daten.

    Woran kann das liegen?
     

  13. #13
    rootssw rootssw ist offline Mitglied Platin
    Registriert seit
    Aug 2003
    Beiträge
    593
    Dazu wäre es sehr hilfreich, wenn man das Script mal sehen könnte.
    Was meinst du denn mit Popup-Browserfenster?
    Das Script, dass hier vorliegt, oder das normale Popup-Fenster, dass kommt, wenn man in einem geschützten Bereich will?
    Wenn zweiteres nämlich der Fall ist, dann hast du genau das gemacht, was ich schon befürchtete:
    Versuchst du evtl. mit diesem Script das normale .htaccess-Schutz Browser-Fenster zu umgehen, und stattdessen deine eigene Seite (also das Script hier) aufzurufen?!
    Das würde so nämlich nicht funktionieren!
    Dazu müsste man das Script nämlich umschreiben.
    Oder hab' ich mich doch geirrt und du meintest was ganz anderes?
     
    <?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>

  14. #14
    tuccain tuccain ist offline Mitglied Bronze
    Registriert seit
    Feb 2002
    Beiträge
    30
    Also ich hab des Problem jetzt so gelöst: http://$Name:$Password@www

    Und so sieht das Script aus, welches in einer normal zugänglichen Datei ist. Nach einem erlfolgten Login erscheint ein Link welches ein kleines Popup-Fenster öffnet und die Daten wie oben erwähnt übergibt.

    PHP-Code:
    <?php

    if (isset($_POST['Name']) AND isset($_POST['Password'])) {

        
    $pwfile file("secure/.passwd");

        
    $Pass crypt($Password'13');

        
    $user_OK false;



        foreach (
    $pwfile as $zeile) {

            
    $a strpos($zeile":");

            
    $fName substr($zeile0$a);

            
    $fPassword substr($zeile$a 113);

            

            if (
    $_POST['Name'] == $fName AND $Pass == $fPassword) {

                
    $user_OK true;

                break;

            }

            else {
    $user_OK false;}

        }

        if (
    $user_OK == true) {

            echo 
    "Sie wurden erfolgreich eingeloggt! <a href=\"javascript:fenster=window.open('http://$Name:$Password@[url]www.schittenhelm-metallhandwerk.de/secure/[/url]','','width=550,height=400');fenster.focus();\">Zum geschützten Bereich</a>";

        }

        else {

            echo 
    "Benutzername oder Passwort war falsch! Bitte erneut eingeben! <A HRef=\"javascript:history.back()\">Zurück</A>";
            

        }

    }

    else {

        echo 
    "<Form Name=\"Login\" Method=\"POST\" Action=\"$PHP_SELF?vai=content/login&poi=img/oL\">
         " 
    ."   <table width=\"45%\" border=\"0\">
     " 
    ."  <tr>
       " 
    ."        <td>Name:</td>
      " 
    ."   <td align=\"right\"><input type=\"Text\" name=\"Name\"></td>
       " 
    ."</tr>
      " 
    ." <tr>
       " 
    ."        <td>Passwort:</td>
      " 
    ."   <td align=\"right\"><input type=\"Password\" name=\"Password\"></td>
     " 
    ."  </tr>
     " 
    ."  <tr>
     " 
    ."    <td>&nbsp;</td>
      " 
    ."   <td align=\"right\"><input name=\"Submit\" type=\"Submit\" value=\"Einloggen\"></td>
     " 
    ."  </tr>
     " 
    ."</table>
     " 
    ."</Form>";

    }

    ?>
    Einige Sachen werden hier verändert, aber ich denke des Wichtigste erscheint korrekt?!
     

  15. #15
    rootssw rootssw ist offline Mitglied Platin
    Registriert seit
    Aug 2003
    Beiträge
    593
    Achja, genau das meinte ich.
    Ich bin mal deinem Link gefolgt (http://www.schittenhelm-metallhandwerk.de/secure/).
    Dieses Verzeichnis ist durch die Datei .htaccess geschützt.
    Das ist doch überhaupt kein Wunder, dass das Dialog kommt!
    Du müsstest die Datei .htaccess aus diesem Verzeichnis nehmen, und dieses Script in das Verzeichnis packen.
    Mit dem Script, so wie es hier vorliegt, kriegst du aber keinen vernünftigen Schutz hin. du müsstest es also noch so umschreiben, dass man nicht einfach, wenn man den Link kennt, diesen in den Browser eingibt, und dann auf die ungeschützte Seite trifft.
    Auf diese Weise, wie das Script jetzt arbeitet, kann es garnicht den Dialog abschalten, da es ja immer auf das geschützte Verzeichnis zugreift und dort immer die .htaccess greift.
    Ich hoffe, du kannst das nachvollziehen.
     
    <?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>

Ähnliche Themen

  1. seit Ubuntu heißt .htaccess uft8.htaccess und geht nicht mehr?
    Von supersalzi im Forum Hosting & Webserver
    Antworten: 4
    Letzter Beitrag: 17.08.09, 17:21
  2. Antworten: 2
    Letzter Beitrag: 31.01.07, 12:57
  3. Antworten: 15
    Letzter Beitrag: 16.03.05, 16:51
  4. Antworten: 29
    Letzter Beitrag: 15.02.05, 03:08
  5. Antworten: 8
    Letzter Beitrag: 11.12.01, 17:54