alec1 Skrevet 29. august 2008 Del Skrevet 29. august 2008 Hei. Jeg har følgende funksjon som sjekker innlogging. Dette er et ett-brukersystem, så brukernavnet og passordet ligger lagret i to variabler. function checkLogin($v1, $v2){ global $username,$password,$lang_login_fail,$lang_pw_missing,$lang_un_missing,$lang_both_missing; if($v1 && $v2){ if($v1 == $username && $v2 == $password){ setcookie("auth", "$password", time()+86400, "/" , ""); header("Location: main.php"); exit; }else{ <p align=center class=warnText>$lang_login_fail!"; } }else if ($v1){ echo "<p align=center class=warnText>$lang_pw_missing!"; }else if ($v2){ echo "<p align=center class=warnText>$lang_un_missing!"; } } Forslag til forbedring av sikkerheten mottas med takk Lenke til kommentar
Lokaltog Skrevet 29. august 2008 Del Skrevet 29. august 2008 Vel. - Alltid lagre passord som en hash. - Alltid salt passordet før det hashes - SPESIELT hvis det skal lagres i en cookie. - Velg en sikker hashingalgoritme, f.eks. SHA-256 - Det er ikke så veldig praktisk å bruke nøkkelordet global for å hente globale variabler. Send heller variablene funksjonen bruker som parametere. - Autentiseringen bør lagres i session med mindre du trenger å bli husket til neste gang du besøker siden. - Brukeren bør autentiseres for hver eneste sidevisning. Lenke til kommentar
alec1 Skrevet 29. august 2008 Forfatter Del Skrevet 29. august 2008 Takker for svar Lokaltog. Hva vil det si å salte passordet? Her er funksjonen som sjekker om en er logget inn. function checkAuth(){ global $auth,$password; if($password != $auth){ setcookie("auth", "", time()+86400, "/" , ""); header("Location: index.php"); exit; } } Lenke til kommentar
OISNOT Skrevet 29. august 2008 Del Skrevet 29. august 2008 (endret) En enkel 3 fils login for en bruker som kan utvides til flere brukere. Testet som en fil. Usikker på om den define sjekken gjøre noe bra, men den gjør ikke noe dårlig... <?php //file ../secretpassword.php if (!defined('START_PAGE')) { trigger_error('Invalid page load', E_USER_ERROR); } $myUser = new My_User('hey', '33afa8016066238ba50e59bff7793dec' /*password is "test"*/, 'mySalt'); <?php //file My_User.php or ./My/User.php (change require accordingly) class My_User { private $_username; private $_password; private $_salt; public function __construct($username, $saltedPassword, $salt) { $this->_username = $username; $this->_password = $saltedPassword; $this->_salt = $salt; } protected function saltPassword($password) { return md5(md5($password) . $this->_salt); } public function getUsername() { return $this->_username; } public function checkAuth($username, $password) { return (!strcmp($username, $this->_username)) && (!strcmp($this->saltPassword($password), $this->_password)); } } <?php //file login.php define('START_PAGE', true); //without autoload require_once 'My_User.php'; require_once '../secretpassword.php'; $myUser->checkAuth($username, $password) or exit('Not authed!'); Endret 29. august 2008 av OISNOT Lenke til kommentar
Garanti Skrevet 29. august 2008 Del Skrevet 29. august 2008 Salting av passord brukes for å gjøre innloggingsystemet sikrere for eventuelle innbrudd. Du har kanskje hørt om hashing av passord, dvs. enveiskryptering av passord. Sett at du lager deg en bruker på en side, og følgende logindata blir registrert og lagt inn i databasen: +---+------------+------------+ | id | username| password| +---+------------+------------+ | 42 | alec1| querty| +---+------------+------------+ Dersom uvedkommende kommer seg inn i databasen vil de kunne se passordet ditt med en gang. Ved å hashe passordet unngår vi dette. Ved hjelp av md5()-funksjonen i PHP vil det da se slik ut: +---+------------+------------+ | id| username| password| +---+------------+------------+ | 42| alec1|d8578edf8458ce06fbc5bb76a58c5ca4| +---+------------+------------+ Passordet blir da enveiskryptert slik at det vil være umulig for et menneske alene å finne ut hva passordet ditt var. Men hackere kan utstyre seg med såkalte rainbow tables, som er tabeller bestående av forhåndshashede passord. Siden qwerty er et veldig vanlig passord, er sjansen stor for at passordet ditt blir røpet. Derfor bruker man salt. Ved å salte passord legger man til en tilfeldig variabel før hashing av passordet, noe som gjør sjansen for å få tak i det opprinnelige passordet minimal. Handlingsrekkefølgen blir da: 1: Få tak i logindata 2: Generer salt 3: Hash salt og passord (md5($password.$salt)) 4: Legg logindata pluss salt inn i databasen +---+------------+------------+----+ | id| username| password| salt| +---+------------+------------+----+ | 42| alec1|9c2c3bcf02365f0deb66e1a8a7fd3070|oplx| +---+------------+------------+----+ Saltet taes vare på til senere, fordi en ny hash må genereres senere når brukeren skal logge inn neste gang. Edit: Ble litt stygt dette Du bør kanskje lese om hashing hos http://norskwebforum.no/ , de har mange fine guider Lykke til! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå