3370 Beiträge | 28 Benutzer | 0 Termine | Angebote der Nutzer | Neueste Beiträge | Statistik | In Beiträgen und Terminen suchen | FAQ

Als Benutzer: mit Passwort: (Beim nächsten Besuch automatisch)

Ich habe mein Passwort vergessen | Ich möchte mich als neuer Benutzer registrieren

Wählen Sie aus diesen Kategorien:

Dellekom   Energie   Internet   Externe Projekte   Private Foren
Unter der Kategorie Internet sind folgende Foren eingerichtet:
PHP - MySQL - HTML - Apache - CSS - Rootserver - Ecke
Forum: PHP - MySQL - HTML - Apache - CSS - Rootserver - Ecke, moderiert von: ande
  Hier treffen sich die "Fachleute"...  
   
  In dieses Forum können nur registrierte Benutzer des Forumsystems schreiben.  
 
Absender Thema: Quellcode eines PHP-Passwortschutzes
ande
30.07.2004
Hier mal mein Passwortschutz-Skript:

Code:

<?php
/*
##########################
# Passwortschutz V 1.0 #
##########################

Das Skript "passwortschutz.php" verwaltet eine Passwortschutz-Funktion innerhalb
eines beliebigen Verzeichnisses, das mit dem Webserver Apache (oder Derivate)
betrieben wird.

Bitte gehen Sie wie folgt vor:

1. Sie legen "passwortschutz.php" z.B. per FTP-Programm in das zu schuetzende
Verzeichnis Ihrer Wahl in Ihrem Webspace. Eventuell muessen Sie die
heruntergeladene Datei "passwortschutz.phps" noch umbenennen.

2. Sie rufen die URL http://www.ihredoman.tld/ihrverzeichnis/passwortschutz.php
mit Ihrem Internetbrowser auf.

3. Damit das Einrichten des Passwortschutzes funktioniert, muss
- der Webserver Apache oder ein Šhnlicher Webserver installiert sein
- f&uuml;r Ihre Domain muss Apache so konfiguriert sein, dass es moeglich ist,
mit ".htaccess"- Dateien Passwortschutz zu betreiben. Fragen Sie dazu Ihren
Webspaceprovider. Falls Sie selbst den Apache konfigurieren: Schalten Sie
z.B. "AllowOverride All" fuer Ihre Domain ein.
- Die Schreibrechte des zu schuetzenden Verzeichnisses muessen kurzfristig und
nur fuer die Ersteinrichtung so eingestellt werden, dass der Benutzer, unter
dem der Webserver laeuft, also "wwwrun" bei SUSE bzw. "www-data" bei Debian,
Schreibrechte in as Verzeichnis hat.
Machen Sie das Verzeichnis im Zweifelsfall "welt-beschreibbar", und notieren
Sie sich die vorigen Einstellungen.
In Ihrem FTP-Programm findet sich dazu sehr wahrscheinlich ein Menuepunkt
"set permissions" oder "Berechtigungen setzen".

4. In der ersten Bildshirmmaske geben Sie einen willkuerlich waehlbaren Namen fuer
den zu schuetzenden Bereich ein, z.B. "Urlaubsbilder", sowie (zweimal) ein
selbst gewaehltes Administrationspasswort. Gelingt die Einrichtung, erscheint
in ca. 10 Sekunden eine Dialogbox, die Sie gleich zur Eingabe von Benutzername
(in diesem Moment geht nur "admin") und ihrem gerade gewaehlten Passwort anhaelt.
Wenn Sie beides korrekt angegeben haben, erscheint eine Oberflaeche, mit der Sie
eine beliebige Zahl weiterer Benutzer anlegen und loeschen koennen.

5. Denken Sie bitte daran, dass nach erfolgter Einrichtung sie die Rechte des
Verzeichnisses wieder zurecknehmen.

6. Alle weiteren Adminisrationsaufgaben erledigen Sie einfach durch Aufruf der
Seite passwortschutz.php durch einen gewoehnlichen Browser.


Dieses Skript laeuft mit der Skriptsprache PHP 4, sowohl wenn

- PHP als Modul einkompiliert ist, als auch wenn
- PHP als CGI ausgefuehrt wird.

Letzteres ist bei den meisten Webhostingfirmen wie Strato, Hosteurope usw. der
Fall.

Der Passwortschutz bewirkt, dass alle Besucher, die Inhalte
des geschuetzten Verzeichnisses sehen oder aufrufen wollen, sich
zuerst ueber ihren Browser mit ihrem Benutzername und Passwort ausweisen
muessen.

Der Passwortschutz kann als Ganzes aufgehoben werden, wenn Sie die
Dateien .htaccess und .htpasswd (eventuell auch dieses Skript)
in dem zu schuetzenden Verzeichnis loeschen. Dateien, die mit einem Punkt beginnen
(wie diese beiden) gelten unter Unix als "versteckt" und mueesen ggfs. erst
mit einer bestimmten Option Ihres FTP-Programmes sichtbar gemacht werden.

Copyright © 2002-2004 by Andreas Delleske - GNU Public License
Deutsche Fassung siehe: http://www.gnu.de/gpl-ger.html
Kontakt: scripts at dellekom.de / http://www.dellekom.de

Dieses Skript unterliegt der GNU Public License und ist damit frei
verfuegbar. Veraenderungen und Erweiterungen muessen jedoch wieder
veroeffentlicht werden und dieses Copyright muss erhalten bleiben.

Aenderungsvorschlaege und Fehlerkorrekturen nehme ich gerne entgegen
28.7.2004 Andreas Delleske, <scripts@dellekom.de>

ToDo:

- Das Skript kann selbst versuchen, ob es das Verzeichnis schreibbar machen kann
und wieder zurueck.
- Das Skript sollte pruefen, ob die Schreibrechte im Verzeichnis wieder
restriktiv sind, bevor die normale Arbeit weitergeht.
- Es muss unter vielen verschiedenen Providern und Servervarianten ausprobiert
werden.

*/

function error_die($mesg) {
echo "<tr><td class=\"g1\"><font color=\"red\">";
echo "<h2>Fehler:</h2>";
echo $mesg;
echo "</font></td></tr>n";
echo "<tr><td><a href=\"javascript:history.go(-1)\">Zur&uuml;ck</a></td></tr>n";
echo "</table></body></html>";
die();
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<title>Passwortschutz f&uuml;r dieses Verzeichnis</title>
<style type="text/css">
<!--
body { color:#000033; font-family: Verdana, sans-serif; }
p { font-family: Verdana, sans-serif; font-size: 12.75px; text-align:justify; margin-top: 6px; margin-bottom: 1px; }
table { color: #000033; }
td { font-family: Verdana, sans-serif; font-size: 12.75px; color: #000033; }
.h { background-color: #00cccc; font-size: 12.75px; }
.hb { background-color: #0066cc; color: #ffffff; text-align: center; font-size: 15px; font-weight: bold; }
.eb { background-color: #FF9999; text-align: center; font-size: 15px; font-weight: bold; }
.hc { background-color: #00cccc; font-size: 12.75px; text-align: center; }
.hr { background-color: #00cccc; font-size: 12.75px; text-align: right; }
.g1 { background-color: #ffffff; }
.g1c { background-color: #ffffff; text-align: center; }
.g1r { background-color: #ffffff; text-align: right; }
.g2c { text-align: center; }
.g2r { text-align: right;}
.okbuttons { font-family:Verdana,sans-serif; font-size: 10.75px; border-top: 1px solid #A0A0A0; border-bottom: 1px solid #505050; border-left: 1px solid #A0A0A0; border-right: 1px solid #505050; padding: 1px; }
.okbuttons:focus { border: 1px solid black; }
.okbuttons:hover { border: 1px solid black; background-color: #A0E0A0; text-decoration: underline; }
.cancelbuttons { font-family:Verdana,sans-serif; font-size: 10.75px; border-top: 1px solid #A0A0A0; border-bottom: 1px solid #505050; border-left: 1px solid #A0A0A0; border-right: 1px solid #505050; padding: 1px; }
.cancelbuttons:focus { border: 1px solid black; }
.cancelbuttons:hover { border: 1px solid black; background-color: #A0E0A0; text-decoration: underline; background-color: #F0B0B0; }
.editbox { font-family:Verdana,sans-serif; font-size: 10.75px; border: 1px solid #A0A0A0; padding: 1px; }
.editbox:focus { border: 1px solid black; }
.editbox:hover { border: 1px solid black; }
-->
</style>
<meta name="Author" content="Andreas Delleske">
<meta name="copyright" content="Copyright 2002-2003 by Andreas Delleske, GNU Public License">
<meta name="description" content="Passwortschutz f&uuml;r ein Web-Verzechnis">
<meta name="keywords" content="htaccess Passwortschutz PHP">
<meta name="robots" content="none">
<?php
if($forward) {
echo "<META HTTP-EQUIV=\"refresh\" content=\"10;URL=$PHP_SELF\">";
}
?>
</head>
<body marginwidth="0" marginheight="0" leftmargin="0" rightmargin="0" topmargin="0" bgcolor="#eeeeee">
<table width="100%" cellspacing="0" cellpadding="4" border="0">
<tr>
<td class="hb">Passwortschutz</td>
</tr>
</table>
<table width="100%" cellspacing="0" cellpadding="4" border="0">
<?php

// Wenn die Passwort-Datei .htpasswd in diesem Verzeichnis noch nicht existiert,
// mu§ es sich um eine Neuanlage handeln.

if(!file_exists("./.htpasswd")) {
// .htpasswd existiert nicht
if($_POST[$save] != "yes") {
// Noch kein Submit, also Eingabefelder anzeigen:
?>
<form method="post" action="passwortschutz.php">
<tr>
<td class="g1c" colspan="2">
In diesem Verzeichnis wurde noch kein Passwortschutz eingerichtet<br>
(Datei <tt>.htpasswd</tt> existiert nicht).</td>
</tr>
<tr>
<td class="g2r" width="70%">
Name f&uuml;r den zu sch&uuml;tzenden Bereich (erscheint bei der Abfrage):</td>
<td class="g2" width="30%">
<input class="editbox" type="text" name="bereich"></td>
</tr>
<tr>
<td class="g1r">
Bitte geben Sie ein Passwort f&uuml;r den Administrator "admin" an:</td>
<td class="g1">
<input class="editbox" type="password" name="adminpass1"></td>
</tr>
<tr>
<td class="g2r">
Passwort-Wiederholung zur Kontrolle:</td>
<td class="g2">
<input class="editbox" type="password" name="adminpass2"></td>
</tr>
<tr>
<td class="g1r">
Notieren Sie sich bitte das admin- Passwort, es
ist sp&auml;ter nicht mehr aus dem System zu erhalten.</td>
<td class="g1">
&nbsp;</td>
</tr>
<tr>
<td class="h">
&nbsp;</td>
<td class="h">
<input type="hidden" name="save" value="yes">
<input type="hidden" name="forward" value="1">
<input class="okbuttons" type="submit" name="submit" value="Benutzer admin einrichten"></td>
</tr>
</form>
</table>

<?php
} else {
// submit / save = yes, es wurde etwas eingegeben
if($bereich == "") {
$bereich = "Passwortschutz";
}
if($adminpass1 != $adminpass2) {
error_die("Passw&ouml;rter stimmen nicht &uuml;berein");
}
if($adminpass1 == "") {
error_die("Sie m&uuml;ssen ein Passwort angeben");
}
if(strlen($adminpass1) < 4) {
error_die("Das Passwort muss mindestens vier Zeichen lang sein");
}
if(!eregi("^[0-9a-z]*$", $adminpass1)) {
error_die("Das Passwort darf nur Ziffern oder Buchstaben von A-Z oder a-z enthalten");
}
// Erzeugen der .htaccess-Datei:
$pfad = $SCRIPT_FILENAME;
$pfad = ereg_replace('/passwortschutz.php', '', $pfad);
$inhalt_htaccess = "AuthType BasicnAuthName \"$bereich\"n";
$inhalt_htaccess .= "AuthUserFile $pfad/.htpasswdn";
$inhalt_htaccess .= "require valid-usern";
$wf = @fopen("./.htaccess", "w+") or error_die("Das Verzeichnis, in dem
passwortschutz.php liegt, muss dem Benutzer, unter dem der Webserver
l&auml;uft, Schreibzugriff erlauben.<br />
<br />Die Datei \".htaccess\" konnte nicht erstellt werden. (1)");
if(!fwrite($wf, $inhalt_htaccess)) {
error_die("Das Verzeichnis, in dem
passwortschutz.php liegt, muss dem Benutzer, unter dem der Webserver
l&auml;uft, Schreibzugriff erlauben. Datei \".htaccess\" konnte nicht erstellt werden. (2)");
}
fclose($wf);
// Erzeugen der .htpasswd-Datei mit dem ersten Eintrag f&uuml;r
// den Administrator

$crypted_adminpw = crypt($adminpass1);
$inhalt_htpasswd = "admin:".$crypted_adminpw."n";
$wf = fopen("./.htpasswd", "w+");
if(!fwrite($wf, $inhalt_htpasswd)) {
error_die("Das Verzeichnis, in dem
passwortschutz.php liegt, muss dem Benutzer, unter dem der Webserver
l&auml;uft, Schreibzugriff erlauben. Datei \".htaccess\" konnte nicht erstellt werden. (3)");
}
fclose($wf);
?>
<tr>
<td class="g1">
&nbsp;</td>
<td class="g1">
Der Passwortschutz wurde eingerichtet.</td>
</tr>
<tr>
<td class="g1">
&nbsp;</td>
<td class="g1">
Sie werden in 10 Sekunden zur Administration weitergeleitet (oder
Sie laden die Seite manuell neu). Es m&uuml;sste sich dann ein
zus&auml;tzliches kleines Fenster &ooml;ffnen, dass Sie nach
Ihrem Benutzernamen (zuerst ist nur "admin" m&ouml;glich) und dem von Ihnen
gerade eben angelegten Passwort fragt.<br /><br />
Vergessen Sie bitte nicht, in dem Verzeichnis, in welchem <tt>passwortschutz.php</tt>
liegt, die Schreibrechte wieder zu reduzieren, sodass Fremde nichts
&uuml;berschreiben k&ouml;nnen.</td>
</tr>
</table>
<?php
} // submit / kein submit
} else {
// .htpassword-Datei existiert!
// Alle Benutzer einlesen:
if($REMOTE_USER == "") {
error_die("Es kann sein, dass der Passwortschutz bei Ihnen nicht funktioniert.
Fragen Sie bitte Ihren Webhostingprovider, ob er die Benutzung des
.htaccess- Mechanismus erlaubt.");
}
if($REMOTE_USER != "admin") {
error_die("Sie sind als Benutzer \"".$REMOTE_USER."\"angemeldet.<br>
Um die Passw&ouml;rter zu administrieren,
m&uuml;ssen Sie als Benutzer \"admin\" mit dem zugeh&ouml;rigen Passwort
angemeldet sein.");
}
$fw = fopen('./.htpasswd', 'r');
$benutzerliste = array();
while($zeile = fgets($fw, 1024)) {
// Benutzername und verschluesseltes Passwort ablegen
if(strlen($zeile) > 1) {
$benutzerliste[] = $zeile;
}
}
fclose($fw);
if($save == "yes") {
// Es wird ein Benutzer geloescht, geaendert oder hinzugefuegt.
if(strpos($submit, "schen")) {
foreach($benutzerliste as $index => $zeile) {
list($ben, $pw) = explode(":", $zeile);
if($ben == $benutzer) {
/* Benutzer lšschen */
$benutzerliste[$index] = "";
break;
}
}
$change = 1;
?><tr>
<td class="g1c">Der Benutzer <b>"<?php echo $benutzer; ?>"</b>
wurde gel&ouml;scht.</td>
</tr>
<?php
}
if(strpos($submit, "ndern")) {
if($pw1 != $pw2) {
error_die("Passw&ouml;rter stimmen nicht &uuml;berein");
}
if(strlen($pw1) < 4) {
error_die("Das Passwort muss mindestens vier Zeichen lang sein");
}
foreach($benutzerliste as $index => $zeile) {
list($ben, $pw) = explode(":", $zeile);
if($ben == $benutzer) {
/* Passwort fźr Benutzer Šndern */
$crypted_pw = crypt($pw1);
$benutzerliste[$index] = $benutzer . ":" . $crypted_pw . "n";
break;
}
}
$change = 1;
?><tr>
<td class="g1c">Das Passwort von Benutzer <b>"<?php echo $benutzer; ?>"</b>
wurde ge&auml;ndert.</td>
</tr>
<?php
}
if(strpos($submit, "anlegen")) {
if($pw1 != $pw2) {
error_die("Passw&ouml;rter stimmen nicht &uuml;berein");
}
if(!eregi("^[a-z0-9]*$", $benutzer)) {
error_die("Der Benutzername darf nur Buchstaben und Zahlen enthalten");
}
if(strlen($pw1) < 4) {
error_die("Das Passwort muss mindestens vier Zeichen lang sein");
}
$crypted_pw = crypt($pw1);
$benutzerliste[] = $benutzer . ":" . $crypted_pw ."n";
$change = 1;
?><tr>
<td class="g1c">Der Benutzer <b>"<?php echo $benutzer; ?>"</b>
wurde hinzugef&uuml;gt.</td>
</tr>
<?php
}
if($change == 1) {
asort($benutzerliste);
$fw = fopen('./.htpasswd', 'w');
foreach($benutzerliste as $zeile) {
list($ben, $pw) = explode(":", $zeile);
if($ben != "") {
fputs($fw, $zeile);
}
}
fputs($fw, "n");
fclose($fw);
// und alles nochmal reinholen
$fw = fopen('./.htpasswd', 'r');
unset($benutzerliste);
$benutzerliste = array();
while($zeile = fgets($fw, 1024)) {
// Benutzername und verschluesseltes Passwort ablegen
if(strlen($zeile) > 1) {
$benutzerliste[] = $zeile;
}
}
fclose($fw);
}
}

// Benutzerliste ausgeben
?>
</table>
<table width="100%" cellspacing="0" cellpadding="4" border="0">
<tr>
<td class="hc" colspan="4">
Verwaltung der Benutzer, die Zugriff auf das Verzeichnis haben</td>
</tr>
<tr>
<td class="hr">&nbsp;</td>
<td class="h">Passwort</td>
<td class="h">Wiederholung</td>
<td class="h">&nbsp;</td>
</tr>
<?php
$count = 0;
foreach($benutzerliste as $zeile) {
list($user, $pass) = explode(":", $zeile);
$greyclass = ($count ++ % 2) ? "g1" : "g2";
?>
<form method="post" action="passwortschutz.php">
<tr>
<td class="<?php echo $greyclass; ?>r">Benutzer <b><?php echo $user; ?></b></td>
<td class="<?php echo $greyclass; ?>"><input class="editbox" type="password" size="16" name="pw1"></td>
<td class="<?php echo $greyclass; ?>"><input class="editbox" type="password" size="16"name="pw2"></td>
<td class="<?php echo $greyclass; ?>">
<input type="hidden" name="save" value="yes">
<?php
echo "<input type=\"hidden\" name=\"benutzer\" value=\"$user\">";
?>
<input class="okbuttons" type="submit" name="submit" value="Passwort &auml;ndern">
<?php
if($user != "admin") {
?>
<input class="cancelbuttons" type="submit" name="submit" value="Benutzer l&ouml;schen"></td>
<?php
}
?>
</tr>
</form>
<?php
}
?>
<form method="post" action="passwortschutz.php">
<tr valign="bottom">
<td class="hr">Benutzer: <input class="editbox" type="text" size="25" name="benutzer"></td>
<td class="h"><input class="editbox" type="password" size="16" name="pw1"></td>
<td class="h"><input class="editbox" type="password" size="16" name="pw2"></td>
<td class="h">
<input type="hidden" name="save" value="yes">
<input class="okbuttons" type="submit" name="submit" value="neu anlegen"></td>
</tr>
</form>
</table>
<?php

}
 

Stand: 07.09.2010, 15:59:27 Uhr (36 ms)