ERLEDIGT
NEIN
NEIN
ANTWORTEN
22
22
ZUGRIFFE
1215
1215
EMPFEHLEN
-
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
-
oder
Da findest du bestimmt was.<?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>
-
wie gesagt, ich habs nicht ganz hinbekommen, das ist u.a. der grund weshalb ich hier danach frage...
trotzdem danke
-
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."; ?>
-
ich brauche sie nur für die anmeldung.
-
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:
Das "java script" musst du natürlich zusammen schreiben (wird vom Forum automatisch auseinander geschrieben).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>";
}
?>
Wenn's Fehler geben sollte, bitte melden!
<?php if ($sein || !$sein) echo "Das ist hier die Frage."; ?>
-
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."; ?>
-
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($zeile, 0, $a);
$fPassword = substr($zeile, $a + 1, 13);
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."; ?>
-
wäre mir neu wenn du ein Multidimensionales Array erhalten würdest wenn du nen Explode aufrufstPHP-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;
}

Und was ich eigentlich noch wenniger verstehePHP-Code:if (($_POST['Name'] == $LoginData[$i][0]) AND $Pass == $LoginData[$i][1]) {
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 :)
-
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."; ?>
-
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:
Die Datei .htpasswd, die im selben Verzeichnis liegt sieht so aus: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>";
}
?>
Keine Leerzeichen/Leerzeilen oder sonstwas.test:21CAplOLEsGLE
hallo:21bug8oWWKwEI
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."; ?>
-
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?
-
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."; ?>
-
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.
Einige Sachen werden hier verändert, aber ich denke des Wichtigste erscheint korrekt?!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($zeile, 0, $a);
$fPassword = substr($zeile, $a + 1, 13);
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> </td>
" ." <td align=\"right\"><input name=\"Submit\" type=\"Submit\" value=\"Einloggen\"></td>
" ." </tr>
" ."</table>
" ."</Form>";
}
?>
-
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
-
seit Ubuntu heißt .htaccess uft8.htaccess und geht nicht mehr?
Von supersalzi im Forum Hosting & WebserverAntworten: 4Letzter Beitrag: 17.08.09, 17:21 -
Bin total am verzweifeln: Formular für htaccess login
Von Microhome im Forum PHPAntworten: 2Letzter Beitrag: 31.01.07, 12:57 -
Passwortschutz mit .htaccess + Integration in HTML-Formular
Von altox-de im Forum PHPAntworten: 15Letzter Beitrag: 16.03.05, 16:51 -
htaccess Login-Abfrage obwohl keine htaccess existiert
Von ronin im Forum PHPAntworten: 29Letzter Beitrag: 15.02.05, 03:08 -
htaccess anmeldung über ein PHP-Formular
Von DFP im Forum PHPAntworten: 8Letzter Beitrag: 11.12.01, 17:54






Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren