php sender mail med glemt kodeord

Tags:    php

<< < 12 > >>
Hej
jeg har koden til når bruger har glemt deres password.
men det virker ikke hvis de har oprettet flere profiler med samme email.
er der en der kan hjælpe mig med at lave et loop eller hvad der skal til.?

<?


$Query = mysql_query("select * from profiler where email = '$_POST[mail]'");
$Number = mysql_num_rows($Query);


if($Number == 1) {

$row = mysql_fetch_array($Query);
mail("$_POST[mail]","Genudsendelse af kodeord","Hej,

Dit brugernavn er: $row[brugernavn]
Dit kodeord er...: $row[kodeord]

Du kan logge ind med overstående på www.xxx.dk

Med venlige hilsner
xxx.dk");

echo '<p><strong>Dit kodeord samt brugernavn er nu sendt til din e-mail adresse. <a href="index.php">Klik her for at komme tilbage til forsiden af xxxx.dk</a></strong></p>';
} else {
echo '<p><strong>Der blev ikke fundet nogle profiler med denne e-mail adresse ('.$_POST[mail].') er du sikker på du har tastet rigtigt? <br><br><a href="login.glemt.php">Klik her for at komme tilbage </a> <br><br><a href="index.php">Klik her for at komme til forsiden af xxx.dk</a></strong></p>';
}
?>



11 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Det du vil er altså at lave et loop, så den sender brugernavn og password afsted, til den email der står i feltet - hver gang, den finder emailen i databasen. Korrekt?

Fx
Brugernavn: Biver
Password: Frollo
Email: lol@cat.tld

Brugernavn: Preben
Password: Laila
Email: lol@cat.tld

Så vil du have, at passswords til både Biver og Preben skal sendes til lol@cat.tld?

Dette er et ekstremt sikkerhedshul. Hvis jeg ved at der er en bruger der hedder Biver, og gerne vil bryde ind på Biver's konto, så indtaster jeg bare den samme mail som han har gjort - og VUPTI kan jeg få tilsendt hans kodeord.

Prøv at forestille dig hvis det sker med admin-kontoen.

Derfor: tjek om email-adressen findes i databasen, når brugere oprettes, og lad være at oprette brugeren, hvis den gør.



Om det er smart eller ej at tillade flere brugere at have den samme mail adresse kan vel diskuteres - dog ser jeg heller ikke umiddelbart nogen sikkerheds ricisi forbundet med det, dog ville jeg nok i det mindste være sikker på at validere brugeren's email når dette gøres (hvilket man jo nok altid bør gøre).

Dog vil jeg mene at hvis du gemmer brugerens kodeord i clear tekst i databasen - så beder man altså om at få en over nallerne. Det gør jo at en eventuelt hacker kun er 1 skridt fra at kunne få kodeord hos ALLE der har en bruger på din hjemmeside - og lad os hurtigt indse dette, chancen for at en god del af disse brugere har samme kodeord til deres e-mail er nok rimelig stor - og derved har denne hacker lige pludselig adgang til uanede mængder af information som bare er guf for ham. Derfor vil jeg foreslå dig at anvende en envejs kryptering på dine kodeord - og derfor bliver du også nødt til at generere et nyt kodeord for brugere når de bruger din glemt kodeords funktion.

Her følger lidt kode som kunne gøre dette, jeg anvender her md5 som kryptering, dog bør du se efter bedre løsninger da denne har en del sikkerheds ricisi alene, desværre kan jeg ikke lige komme på andre.

Fold kodeboks ind/udKode 


Ovenstående kode viser hvordan du relativt simpelt kan chekke om en bruger har indtastet korrekt login. Bemærk brugen af mysql_real_escape_string på bruger input som sikrer mod sql injection, alternativ og bedre måde ville være gennem brug af prepared statements som du kan læse mere om på php.net under mysqli sektionen.

Den ideelle måde at lave en glemt kodeords funktion er herefter først at man indtaster sin e-mail, herefter generes så et unikt id som indsættes i profiler tabellen ud for den enkelte bruger, og du udsender herefter en e-mail til brugeren med et link som han skal klikke for at få det nye kodeord. Går brugeren så ind på dette link så validerer du selvfølgelig ud fra det unikke ID, passer id'et jamen så generer du et nyt kodeord og sender det IGEN per e-mail til brugeren og selvfølgelig opdaterer du nu tabellen til at virke med dette.

Fold kodeboks ind/udKode 


Til sidst har du så funktionen til rent faktisk at udskifte kodeordet

Fold kodeboks ind/udKode 


Så skulle der vidst være mere end rigelig at gå igang med! :D



Så må du jo sørge for at man kun kan oprette med en e-mail adresse. Alt andet vil da også være ulogisk, hvis man er interesseret i at have en brugerkonto pr. bruger.



Nej det er en dum løsning i mit tilfælde :)
Der er det et "must" at en kan have flere emails.



1) korrekt vil ha den sender burger navn og pass til begge.
2) hvordan vil du bryde ind i Bivers account - hvis du indtaster lol@cat.tld - så kommer mailen jo ikke til dig men til Biver.?
forklar nærmer - :)




2) hvordan vil du bryde ind i Bivers account - hvis du indtaster lol@cat.tld - så kommer mailen jo ikke til dig men til Biver.?
forklar nærmer - :)


Ja, den glæder jeg mig også til en nærmere uddybning af :)



Det er ikke et spørgsmål om hvordan Per vil løse problemet, det er nærmere om hvordan du vil løse problemet.

For det er den type sikkerhedsbrist du åbner op for.

Og da e-mailadressen er det eneste der er tilbage i denne verden som er absolut unik for en bruger, forstår jeg ikke hvorfor du vil skabe flere brugere pr. e-mailadresse.



Indlæg senest redigeret d. 05.02.2009 17:48 af Bruger #10216
Hej Michael - nej det er ikke et spørgsmål om det er per der skal løse problemet . det skriver jeg vist heller ikke nogle steder. jeg spørg blot venligt hvordan man vil "hacke" en account på den måde per siger. for at se om jeg er helt på afvege.

jeg syntes jo ikke umildbart der er en sikkerheds risiko - sådan af de alvorlige - men igen jeg er ikke en haj.
hvis jeg skal ændre systemet til at sende et nyt password er jeg ude hvor jeg ikke kan bunde og jeg mener hvis den sender et link til et nyt password eller sender et nyt pass. så kan det vel ligeså nemt "snappes" af hacker.?
mvh Søren




Her følger lidt kode som kunne gøre dette, jeg anvender her md5 som kryptering, dog bør du se efter bedre løsninger da denne har en del sikkerheds ricisi alene, desværre kan jeg ikke lige komme på andre.


sha




Her følger lidt kode som kunne gøre dette, jeg anvender her md5 som kryptering, dog bør du se efter bedre løsninger da denne har en del sikkerheds ricisi alene, desværre kan jeg ikke lige komme på andre.


sha

Bør man egentlig bruge sha1, eller kan man ikke bruge sha2, eller sha3?



<< < 12 > >>
t