PHP/MYSQL sikkert login system

Tags:    programmering

Jeg er ny i programmering i PHP, så jeg har søgt en del for at få nogle let tilgængelige råd omkring et sikkert PHP/MYSQL login system.

Der er en del forslag, men alle bliver kritiseret på den ene eller anden måde for ikke at være sikre.

Er der nogle den har udviklet et sikkert login system via PHP/MYSQL?

og

vil du/I poste det her?

På forhånd tak

Henrik

OBS!!!

Jeg har fundet dette script på http://www.stargeek.com/php_scripts.php?script=16

Er det sikkert?

<?
function MakeTableLogins($database, $host, $db_user, $db_pass) {//create the logins table
$linkID = mysql_connect($host, $db_user, $db_pass);
mysql_select_db($database, $linkID);
mysql_query("create table logins (user char(32), pasword char(32))", $linkID);
}

function Encrypt($string) {//hash then encrypt a string
$crypted = crypt(md5($string), md5($string));
return $crypted;
}

function AddUser($database, $host, $db_user, $db_pass, $username, $password) { //add user to table logins
$linkID = mysql_connect($host, $db_user, $db_pass);
mysql_select_db($database, $linkID);
$password = encrypt($password);
$username = encrypt($username);
mysql_query("insert into logins values ('$username', '$password')", $linkID);
}

function Login($database, $host, $db_user, $db_pass, $user, $password) { //attempt to login false if invalid true if correct
$auth = false;
$user = Encrypt($user);

$linkID = mysql_connect($host, $db_user, $db_pass);
mysql_select_db("$database", $linkID);
$result = mysql_query("select password from logins where user = '$user'", $linkID);
$pass = mysql_fetch_row($result);
mysql_close($linkID);

if ($pass[0] === (Encrypt($password))) {
$auth = true;
}
return $auth;
}
?>

[Redigeret d. 09/09-05 00:31:37 af Henrik]



2 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Definer "sikker".

Den kode du smed benytter en function kaldet "Encrypt" som er bruger defineret. Denne functioern benytter en indbygget function i php "crypt".
Det er lidt overkill, og det ville værer federe med et fast "salt", men det som sker er at der laves et digest (tænkt crc kode), dvs at man laver et mønster som er rimeligt unikt for den string værdi.

På den måde gemmes username og password ikke i klar tekst i databasen, men som digests .. eller envejs-krypteret som det også kaldes.

Når du så tester om en bruger har rigtig bruger og password, laver du et digest på samme måde som da han blev oprettet/opdateret og sammenligner blot dem med de i databasen.

Hele ideen er at man nu ikke længere kan se folks passwords, faktisk ikke engang deres login navne i selve databasen.

Så hvis der på en eller anden måde sker et læk, indbrug eller noget i den stil er deres konti stadig beskyttet.


Men .. det betyder ikke at selve login systemet er sikkert eller at det er lavet på den bedste måde.

Det er dog en god ting at gøre hvis man har sensitive informationer om sine brugere af den ene eller anden art.
Eller blot vil beskytte dem mod at få stjålet password og bruger informationer.

Der er en hage ved det .. nemlig at du som system admin ikek kan se login og passwords .. og du skal så have noget andet unikt for hver bruger (evt verificeret mail adresse) som du kan bruge til at finde dem med hvis en har smidt sine informationer væk.
Og så skal du give ham nyt password ... og evt nyt login, istedet for de gamle, som selv du ikke længere kan se i klartekst.

Måske var det nok at gøre det med password feltet.



Jeg har fundet et rigtigt godt PHP login script.

Se det her: http://evolt.org/node/60384

[Redigeret d. 19/09-05 16:13:55 af Henrik]



t