Passwortschutz mit .htaccess und PHP

Begonnen von Eismaus, 18 März 2002, 17:16:54

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Eismaus

Ich mal wieder :o)

Ich habe für meine Seite http://www.hammerhuskies.de vor etwas längerer zeit mal ein einfaches Gästebuch das auf einer Textdatei bassiert programmiert.

Nachdem dort aber ziemlich viel Mist geschrieben stand, muste ich das GB zwischenzeitlich sogar schließen.
Mittlerweile gibt es das GB zwar wieder, da ich einen Passwortschutz mit .htaccess eingerichtet habe, aber das wahre ist das auch noch nicht.

Bei der derzeitigen Lösung, wird ein Registrierungscode per Mail verschickt, der erst nach der richtigen Eingabe des Codes den User wirklich registiert. Damit soll erreicht werden, das für jeden User eine existierende Mailadresse bekannt ist.
Leider kann ein einigermaßen fitter Computer nutzer den Code auch ohne Mailadresse herrausfinden.
Zum anderen überprüft meine Skript nicht, ob überhaupt ein Benutzername und ein Passwort eingegen wurde.
Auch müste eine Funktion, die Überprüft ob kein Leerzeichen in dem Passwort und dem Benutzernamen ist noch her, da der .htaccess Schutz sonst nicht funzt.

Leider hab ich keine Ahnung, wie ich das realisieren könnte..

Meine Frage währe jetzt, wie kann ich es verhindern, das der Registriereungscode in der Adresszeile angzeigt wird?
Gibt es eine Möglichkeit, in einer Variablen nach einzelnen Zeichen zu suchen, und diese zu löschen, oder durch ein anderes Zeichenzu ersetzten?

Gruß
Eismaus

Eismaus

Das ganze ist ein Formular, das seine Daten an ein PHP Script schickt.
Dadurch, das aber eine Zufallszahl generiert wird, um die Emailadresse zu prüfen, muß ja auch diese Zahl weiter gegeben werden..
Und auch bei einer PHP-Seite sieht man oben in der Adressleiste, welche Werte als Variablen übergeben werden.
Es steht zwar nicht groß dran, das ist der Registrierungscode, aber jeder der sich etwas damit auskennt, weiß wo er suchen muß..
Ich dachte, das es vielleicht noch eine andere möglichkeit geben könnte..

jagdfalke

also auf anhieb hab ich auch nix fuer dein prob, nur zu dem letzten:
ich denke mal, du hast ein formular, wenn man auf nen button klickt, werden die formulardaten per javascript in eine adresse umgewandelt?
dass man des net in der adresszeile sieht kann man folgendes machen:
<FORM ACTION="datei.php" METHOD=POST>
<input type="text" name="text1">
<input type="submit" value="Abschicken">
</form>
die formulardaten werden per klick auf den button an die datei "datei.php" versendet. in der datei datei.php hast du in diesem fall den inhalt von <input type="text" name="text1"> als variable text1. wenn man dann z. b. echo $text1; schreibt, wird der inhalt des eingabefeldes ausgegeben.
denn rest mit nach zeichen suchen oder so geht glaub ich alles mit php, such doch mal in selfphp (http://www.selfphp.info/) in Funktionsreferenz | String-Funktionen

cu
jagdfalke

jagdfalke

ich nehme an, dass die zufallszahl von einem javascript im formular generiert und dann uebertragen wird? dann
1. moeglichkeit:
lass die zufallszahl von dem php-skript generieren, dann muss die zahl auch net uebertragen werden ;)
2. moeglichkeit:
angenommen das formular hat den namen xyz, dann kan man in das formular schreiben
<input type="hidden" name="code">

nun die zufallsgenerierung in den javascript-bereich machen und wenn die variable mit der zufallszahl als inhalt zahl heist noch schreiben
document.xyz.code.value = zahl;

dann wird das an das skript uebermittelt und man sieht nix davon (nur wenn man in das javascript guckt, aber wenn die zahl zufaellig is, bringt das nix)[Bearbeitet am: 2002-3-18 von jagdfalke]

Eismaus

<html>
<head><title>GB Registrierung</title></head>
<body>
<?
if (isset($submit1)){

srand ((double)microtime()*1000000);
$zahl = rand(1,425);

mail ($email1,"Gästebuchregistrierung auf der Homepage http://www.hammerhuskies.de","Hallo $name1,
Du bist grade dabei, dich für das Gästebuch auf der Homepage der Hammer Huskies zu registrieren.
Der Emailregistrierungscode lautet:
$zahl
Bitte gib diese Zahl auf in dem entsprechenden Feld an!

Bis zum nächsten Besuch

----------------------------------------------------------
Hammer Huskies - ESC Hamm e.V.
http://www.hammerhuskies.de",
"From: Hammer Huskies <huskiepost@hammerhuskies.de> Content-Type: text");

echo"<h2>Gästebuch Registrierung</h2>\n";
echo"Du hast grade eine automatisch generierte Mail zu der angegebenen Emailadresse bekommen.<br>Bitte gebe den dort angegebenen Emailregistrierungscode in das untenstehende Feld ein.<br><br>";
echo"<form name=\"auth\" action=\"$PHP_SELF\" metod=\"get\">\n";
echo"<input type=\"hidden\" name=\"sysdbname\" value=\"pwauth\">\n";
echo"<table border=\"0\">";
echo"<tr><td>Name :</td><td>". $name1 ."<input type=\"hidden\" name=\"name\" value=\"". $name1 ."\"></td></tr>\n";
echo"<tr><td>Vorname :</td><td>". $vorname1 ."<input type=\"hidden\" name=\"vorname\" value=\"". $vorname1 ."\"></td></tr>\n";
echo"<tr><td>Email :</td><td>". $email1 ."<input type=\"hidden\" name=\"email\" value=\"". $email1 ."\"></td></tr>\n";
echo"<tr><td>Username :</td><td>". $uname1 ."<input type=\"hidden\" name=\"uname\" value=\"". $uname1 ."\"></td></tr>\n";
echo"<tr><td>Password :</td><td>". $password1 ."<input type=\"hidden\" name=\"password\" value=\"". $password1 ."\"></td></tr>\n";
echo"<input type=\"hidden\" name=\"zzahl\" value=\"". $zahl ."\">\n";
echo"<tr><td>Emailregistrierung :</td><td><input type=\"text\" name=\"registrierung\" value=\"\"></td></tr>\n";
echo"<tr><td><input type=\"submit\" name=\"schicken\" value=\"submit data\"></td></tr>\n";
echo"<form><input type=button value='Fenster zu' onClick='self.close()'></form>";
echo"</table>\n";
echo"</form>";
}
else {
echo"<h2>Gästebuch Registrierung</h2>\n";
echo"<form name=\"auth1\" action=\"$PHP_SELF\" metod=\"get\">\n";
echo"<input type=\"hidden\" name=\"submit1\" value=\"1\">\n";
echo"<table border=\"0\">";
echo"<tr><td>Name :</td><td> <input type=\"text\" name=\"name1\" value=\"\"></td></tr>\n";
echo"<tr><td>Vorname :</td><td><input type=\"text\" name=\"vorname1\" value=\"\"></td></tr>\n";
echo"<tr><td>Email :</td><td><input type=\"text\" name=\"email1\" value=\"\"></td></tr>\n";
echo"<tr><td>Username :</td><td><input type=\"text\" name=\"uname1\" value=\"\"></td></tr>\n";
echo"<tr><td>Password :</td><td><input type=\"text\" name=\"password1\" value=\"\"></td></tr>\n";
echo"<tr><td><input type=\"submit\" name=\"schicken\" value=\"submit data\"></td></tr>\n";
echo"<form><input type=button value='Fenster zu' onClick='self.close()'></form>";
echo"</table>\n";
echo"</form>";
}




// ende des Formulars
#################################################################################################
if ((isset($sysdbname))and($zzahl == $registrierung)){

 $host="host";
 $dbuser="user";
 $dbpassword="pw";
 $database="db";

$conn= mysql_connect($host,$dbuser,$dbpassword); // hier Verbindung zur Datenbank herstellen
                                                 // vorher die Daten aus einem geschützten
                                                 // Verzeichnis per include holen.


mysql_select_db($database);
###############################################################################
// Abfrage ob uname schon vergeben ist

 $uni= mysql_query("select id,uname from pwauth where uname ='$uname'");
 $rowcount =  mysql_num_rows($uni);
 if($rowcount > 0){
         echo"Username ist schon vergeben !<br> Bitte geben Sie einen neuen Usernamen an.";
         echo"<a href=\"javascript:history.back();\">zurück zur Eingabe</a>";
         exit();
         }

// Es muss zuerst ein insert gemacht werden.

 mysql_query("insert into pwauth (name,vorname,email,uname,password,insert_date,lastupdate) values('$name','$vorname','$email','$uname','$password',now(),now())");
###############################################################################
  // nachdem der Eintrag in der Datenbank ist,wird nun die.htacces und .htpasswd erzeugt

  $res = mysql_query("select * from pwauth");
  $safe= "../gbpost";     // hier den Pfad des zu schützenden Verzeichnisses eintragen
                     // Angaben relativ zur Document Root.
                     // Beispiel zu schützendes Verzeichnis == /foo/bar
                     // $safe="foo/bar";
                     // Die Dateien werden dann automatisch in dieses Verzeichnis gelegt.

           $htaccess= fopen("../gbpost/.htaccess", "w+");
           $htpasswd= fopen("../gbpost/.htpasswd", "w+");
           fputs($htaccess,
"  AuthType Basic \n".
"  AuthName \"Gästebuch Posting\" \n".
"  AuthUserFile /Pfad der Geschütz werden soll/.htpasswd \n".
"  Options -Indexes \n" );

             while($data=mysql_fetch_object($res)){
                 fputs($htaccess, "require user $data->uname\n");
                 fputs($htpasswd, "$data->uname:".crypt($data->password,CRYPT_STD_DES)."\n");
          }
           fclose($htaccess);
           fclose($htpasswd);

echo"Die Registrierung ist erfolgreich abgeschlossen!";}

else {
if (isset($zzahl) and ($zzahl != $registrierung)) echo "Der Registrierungscode war falsch. Die Registrierung ist fehlgeschlagen!";
}

?>
</body>
</html>

Das ist der Quelltext. Vielleicht ist es dann ja einfacher..

EdeWuff

Hi, erstmal zur Information:

das Problem mit dem Registrierungscode liegt in deinem Formular:

---------schnipp---------------
else {
echo"<h2>Gästebuch Registrierung</h2>\n";
echo"<form name=\"auth1\" action=\"$PHP_SELF\" metod=\"get\">\n";
echo"<input type=\"hidden\" name=\"submit1\" value=\"1\">\n";
echo"<table border=\"0\">";

--------schnapp---------------

Die Methode get bewirkt, dass Parameter im URL übergeben werden.
Mit der Methode post werden die Parameter "unsichtbar" übergeben

Gruß aus Hamm nach Hamm  ;)


oops - hätte ich mal besser in Ruhe alle Beiträge gelesen ;-)[Bearbeitet am: 26/3/2002 von EdeWuff]

jagdfalke

So da ich mir gerade ein Gästebuch progge, is mir nun auch eingefallen, an was es liegen könnte, das wurd aber grad gepostet. Ich hatte nähmlich keine Lust/Zeit, mir QT durchzulesen, und hatte dann EdeWuff schon was gepostet.
Dazu aus SelfHTML:
ZitatEine weiteres wichtiges Attribut bei der Formulardefinition ist das Attribut method=. Dabei bestimmen Sie, nach welcher HTTP-Übertragungsmethode die Formulardaten an ihr Ziel gelangen. Dabei gibt es zwei mögliche Wertzuweisungen:
 - Wenn Sie method="get" wählen (diese Angabe ist übrigens nicht zwingend erforderlich, da get als Default-Einstellung definiert ist), werden die Daten des ausgefüllten Formulars als Parameter an die Aufrufadresse angehängt. Die Anfrage, die beim Server eintrifft, sieht dann beispielsweise so aus:
http://www.ihr-guter-name.de/cgi-bin/ feedback.cgi?AnwenderName=Stefan+M%FCnz&AnwenderMail=selfhtml@teamone.de&Text=Das+ist+ein+kleiner+Text. Das verarbeitende Script kann diese als Parameter übergebene Zeichenkette auslesen und für die Datenverarbeitung auseinanderdröseln. Wenn Sie sich näher dafür interessieren, können Sie den Abschnitt  HTML-Formulare und CGI lesen.
 - Wenn Sie method="post" wählen, werden die Daten des augefüllten Formulars vom Web-Server über den Standardeingabekanal zur Verfügung gestellt, und ein auswertendes CGI-Script muss die ankommenden Daten behandeln wie eine Benutzereingabe, die auf der Kommandozeile gemacht wurde (post = verschicken). Bei CGI-Scripts müssen Sie diese Methode auf jeden Fall dann verwenden, wenn das Script die POST-Methode verarbeitet, und wenn die Formulardaten zu umfangreich für die GET-Methode sind.

Das W3-Konsortium empfiehlt, die Methode get dann zu wählen, wenn das auswertende Programm die Daten nur als Input benötigt (z.B. für eine Suche), während die Methode post für Fälle empfohlen wird, in denen das auswertende Programm "Seiteneffekte" wie das Einspeisen der Daten in eine Datenbank ausführt.
Aus http://selfhtml.teamone.de/html/formulare/definieren.htm#bereich

zur Erläuterung

Was ich an dem QT insgesamt vielleicht anders machen würd, ist am Anfang die Zeilen, die mit echo "... beginnen, den Inhalt von denen nicht in einen PHP-Breich schreiben, sondern auserhalb (also dann ohne echo ... ;))und dann z. B.
echo"<form name="auth" action="<?php echo $PHP_SELF ?>" metod="get">
Dadurch wird der QT viel übersichtlicher (zumindest für mich)
Oder auch folgendermaßen:
echo'<form name="auth" action="'.$PHP_SELF.'" metod="get">'."\n";
auch für mich übersichtlicher, da die ganzen Backslashes weg sind

cu
jagdfalke

html deaktiviert...[Bearbeitet am: 2002-4-14 von jagdfalke]