Cam Telefonsex mit Cam.

Hallo und herzlich willkommen auf www.chaletaire.com/php/pass/. Hier bieten wir Ihnen ein kostenloses Passwort-Script, geschrieben in PHP.

Wir wünschen Ihnen viel Spaß bei der Nutzung des Scripts.
Wir bedanken uns für Ihren Besuch!

Impressum

free web proxy server

 

Free PHP Passwort Script
Wer eine Internetseite betreibt, der benötigt für die administrativen Bereiche, und ggf. für registrierte Nutzer, auch einen Passwortschutz. Nicht selten aber sind verwendete Passwortschutzverfahren eher unsicher als sicher, nämlich dann, wenn nach Eingabe von Benutzername und Passwort lediglich eine SessionID generiert und als "Erkennungsmarke" im URL mitgeführt wird. Klickt man nun mit dieser "Erkennungsmarke" im URL auf einen Link zu einer fremden Internetseite, der dortige Webmaster checkt gerade seine Statistiken und klickt auf den Referrer mit der "Erkennungsmarke" und - er ist angemeldeter User oder gar Administrator auf der Referrerseite.
So mir selbst zweimal widerfahren. Einmal befand ich mich in einem fremden E.-mailkonto bei einem renommierten deutschen Webhoster, und einmal im Administrationsbereich einer fremden, interaktiven Webapplikation.
Wie oft solche eklatanten Sicherheitslöcher rein zufällig zum Tragen kommen, und wie häufig sie sich provozieren lassen, ist eher ungewiß, aber von selten möchte ich da nicht sprechen. Möglicherweise sind bei solchen unsicheren Sicherheitsmechanismen auch noch die Passwörter unverschlüsselt auf den Servern abgespeichert - wer weiß.

Bei dem hier vorgestellten Passwort-Script sind Benutzername und Passwort veschlüsselt auf dem Server hinterlegt, IP-Adresse und Useragent des Benutzers sind integrierter Bestandteil des LoginCookies und werden bei jedem Aufruf einer geschützten Seite überprüft - das Gleiche gilt für das SessionCookie. Erfolgreiche Übernahmen durch fremde Rechner sind da eher illusorisch.

Daß das Verzeichnis, in dem sich die Dateien "admin.txt" und "pass.txt" befinden, gegen Fremdzugriffe geschützt sein muß, sei an dieser Stelle ausdrücklich erwähnt. Empfohlen sei da eine darin befindliche .htaccess-Datei mit dem Inhalt:
order deny,allow
deny from all

Somit ist der Server ausschließlich berechtigt, diese Dateien für operative Prozesse zu nutzen, aber nicht zur Auslieferung derselben.
Eine Besonderheit ist, daß hier beliebige Zeichen für die Nutzerkennung und das Passwort eingegeben werden können. Von nationalen Sonderzeichen sollte allerdings Abstand genommen werden, da sie nicht auf allen Tastaturen verfügbar sind.

Was morgen unter ethisch noch nicht ausgereiften oder defekten Geisteshaltungen vorgeht, läßt sich heute noch nicht erahnen. Von daher ist eine sehr restriktive Floodsperre für die Anmeldeseite immer angeraten, sodaß beispielsweise Brut-Force-Attacken ins Leere laufen.
Auf der Testseite sind 5 Seitenaufrufe als Maximum IP/24h (anpaßbar) eingestellt, die Sessionzeit auf 5 Minuten (anpaßbar) - für administrative Zwecke eigentlich ausreichend.
Zur Abwehr von Brut-Force-Attacken kann auch ein Capcha gute Dienste leisten.

Alle Bemühungen, Serverbereiche sicherer zu machen, können nicht darüber hinweg täuschen, daß auch der administrierende PC gesichert sein muß. Ein Virenscanner mit aktuellen Signaturen und eine Firewall sind da das absolute Minimum!

Test Anmeldeseite

Download PHP Passwort Script.

Downloads PHP Passwort Script

Das Script wird wie folgt an oberster Stelle in eine zu schützende Internetseite eingebunden, Ausnahme, wenn andere Sicherungsmaßnahmen bereits vorher greifen sollen oder können:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
session_start();
if(!isset($_SESSION['checked']) || $_SESSION['checked'] != md5($ip.$agent)){
header('Location: anmeldeseite.php');
die();
}
if (!isset($_COOKIE['login']) || $_COOKIE['login'] != md5($ip.$agent.session_id())){
header('Location: anmeldeseite.php');
die();
}
?>

Das Script für die Anmeldeseite wird dort natürlich auch an oberster Stelle positioniert, Ausnahme wiederum, wenn andere Sicherungsmaßnahmen bereits vorher greifen sollen oder können:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
session_start();
if (isset($_COOKIE['login']) && $_COOKIE['login'] == md5($ip.$agent.session_id())){
if(isset($_SESSION['checked']) && $_SESSION['checked'] == md5($ip.$agent)){
header('Location: geschuetzteseite.php');
die();
 }
}
if($HTTP_POST_VARS['administrator']){
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$username = md5($_POST['admin']);
$password = md5($_POST['password']);
$admin_file = "config/admin.txt";
$FP = fopen($admin_file, "r");
$admin_name=fgets($FP, 4096);
fclose($admin_file);
$pass_file = "config/pass.txt";
$FP = fopen($pass_file, "r");
$admin_pass=fgets($FP, 4096);
fclose($pass_file);
if (($username === trim($admin_name)) && (trim($admin_pass) === $password)){
session_regenerate_id();
$_SESSION['checked'] = md5($ip.$agent);
$cookie = md5($ip.$agent.session_id());
setcookie ("login", $cookie, time() +300);
//setcookie ("login", $cookie);
header('Location: geschuetzteseite.php');
die();
 }
}
?>

Das Anmeldeformular für die Anmeldeseite:

<form action="$PHP_SELF" method="POST" name="admin_login">
<br><b style="color: #CC99FF;">Administrator<b><br><input type="text" name="admin" style="border-style: solid; border-color: #8C33A1; border-width: 3px; width: 140px;">
<br><b style="color: #CC99FF;">Password</b><br><input type="password" name="password" style="border-style: solid; border-color: #8C33A1; border-width: 3px; width: 140px;">
<br> <input type="submit" name="administrator" value="Anmelden" style="color: #cccccc; background-color: #8C33A1; width: 140px;">
</form>

Das Script zum ändern der Zugangdaten gehört ebenfalls an die oberste Stelle der entsprechenden Seite (hier changepass.php), ebenfalls Ausnahme, wenn andere Sicherungsmaßnahmen bereits vorher greifen sollen oder können:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
session_start();
if(!isset($_SESSION['checked']) || $_SESSION['checked'] != md5($ip.$agent)){
header('Location: anmeldeseite.php');
die();
}
if (!isset($_COOKIE['login']) || $_COOKIE['login'] != md5($ip.$agent.session_id())){
header('Location: anmeldeseite.php');
die();
}
if($HTTP_POST_VARS['change']){
$admin_file = "config/admin.txt";
$FP = fopen($admin_file, "r");
$admin_name=fgets($FP, 4096);
fclose($admin_file);
$pass_file = "config/pass.txt";
$FP = fopen($pass_file, "r");
$admin_pass=fgets($FP, 4096);
fclose($pass_file);
$username = md5($_POST['oldadmin']);
$password = md5($_POST['oldpassword']);
if (($username === trim($admin_name)) && (trim($admin_pass) === $password)){
$username = md5($_POST['admin']);
$password = md5($_POST['password']);
if ($FP = fopen ($admin_file, "w")){
fwrite ($FP, $username);
fclose ($FP);
}
if ($FP = fopen ($pass_file, "w")){
fwrite ($FP, $password);
fclose ($FP);
}
}
}
?>

Das Formular für die Seite zur Änderung der Zugangsdaten:

<h2 style="color: #CC99FF;"><u>Ihre bisherigen Zugangsdaten:</u></h2>
<form action="$PHP_SELF" method="POST" name="change_account">
<br /><b>Admin:</b> *<br><input type="text" name="oldadmin" style="border-style: solid; border-color: #8C33A1; border-width: 3px; width: 140px;">
<br /><b>Password:</b> *<br><input type="password" name="oldpassword" style="border-style: solid; border-color: #8C33A1; border-width: 3px; width: 140px;">
<br /><br /><br />
<h2 style="color: #CC99FF;"><u>Bitte geben Sie Ihre neuen Zugangsdaten ein:</u></h2>
<br /><b>Admin:</b> * (A-Z, a-z, 0-9, -_/ und Leerzeichen!)<br><input type="text" name="admin" style="border-style: solid; border-color: #8C33A1; border-width: 3px; width: 140px;">
<br /><b>Password:</b> * (A-Z, a-z, 0-9, -_/ und Leerzeichen!)<br><input type="password" name="password" style="border-style: solid; border-color: #8C33A1; border-width: 3px; width: 140px;">
<br /> <input type="submit" name="change" value="Senden" style="color: #cccccc; background-color: #8C33A1; width: 140px;">
</form>

Das Logout-Script:

<?php
session_start();
setcookie ("login", "", time() -1);
session_regenerate_id();
if($HTTP_POST_VARS['administrator']){
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$username = md5($_POST['admin']);
$password = md5($_POST['password']);
$admin_file = "config/admin.txt";
$FP = fopen($admin_file, "r");
$admin_name=fgets($FP, 4096);
fclose($admin_file);
$pass_file = "config/pass.txt";
$FP = fopen($pass_file, "r");
$admin_pass=fgets($FP, 4096);
fclose($pass_file);
if (($username === trim($admin_name)) && (trim($admin_pass) === $password)){
session_regenerate_id();
$_SESSION['checked'] = md5($ip.$agent);
$cookie = md5($ip.$agent.session_id());
setcookie ("login", $cookie, time() +300);
header('Location: geschuetzteseite.php');
die();
 }
}
?>

Das Formular zur Wiederanmeldung auf der Logoutseite ist identisch mit dem auf der Anmeldeseite.