Ich hab mir was ausgedacht, was relativ sicher ist, wenn der Hacker den Algorythmus nicht weiß. Was anderes zum sicheren Übertragen von Passwörtern kenn ich nicht. Ich halte es sogar für enorm sicher. Ein möglicher Hacker kann nicht an das Passwort kommen, er kann nicht rausfinden, was sonst noch drin steckt, und selbst wenn könnte er nicht an das Passwort kommen (OK, mit BruteForce gehts schon, aber dagegen kann man sich wohl nicht schützen.
Vorgehensweise:
Gegebene Daten: MD5(Passwort) sowohl aufm Server (gespeichert) als auch aufm Client (MD5(Usereingabe))
Server-Adresse
Client fordert vom Server die eigene IP an, hängt diese als String hinten an das MD5(Passwort) und wendet darauf nochmal MD5 an.
Server empfängt den String, vergleicht ihn mit MD5(gespeichertesMD5(Passwort)+$_SERVER['REMOTE_ADDR'])
Hier der PHP-Code dafür, funktioniert sowohl mit GET als auch POST-Requests, man sollte aber das Passwort immer (bei jeder Anfrage) mitschicken - gibt keine Cookies oder Sessions, weil dann die Clientseite aufwändiger wird. Lässt sich natürlich mit Username erweitern u.s.w.
Code: Alles auswählen
<?php
require "data/pb2php.conf.php";
$ip = $_SERVER['REMOTE_ADDR'];
switch ($_REQUEST['request'])
{
case "ip":
echo $ip;
break;
case "eval":
if ($_REQUEST['pass']==MD5($pass.$ip))
{
eval("echo $pass;");
break;
}
default:
echo "IP: ".$ip."<br>";
echo "Passwort verschlüsselt: ".MD5($pass.$ip);
break;
}
Im vorliegenden Code ist das Passwort in einer Datei im Ordner data untergebracht:
Dieser Ordner sollte natürlich nicht zugänglich sein, z.B. durch eine .htaccess Datei in diesem Ordner:
Code: Alles auswählen
Deny from all
ErrorDocument 403 http://localhost/pb2php.php
Den PB-Teil müsst ihr euch selber schreiben, hab ich noch nicht gemacht...
Simon
P.S.: Das funktioniert nicht mit Providern, die ständig die IP-Adresse des Clients wechseln, kann also bspw. bei AOL Probleme machen. In dem Fall sollte man Serverseitig temporär eine ID speichern, die mit einem Zufallsstring verknüpft ist.
Der Client macht also eine ServeMe-Anfrage, kriegt einen Zufallsstring und eine ID (dafür bietet sich dann natürlich eine SessionID an, dann übernimmt PHP gleich das speichern der Daten), verschlüsselt das Passwort mit dem Zufallsstring anstatt der IP-Adresse und sendet die ID mit.