|
| Get password back Fra : Kemster |
Dato : 29-08-02 15:54 |
|
Er der ikke en af jer venlige sjæle der kan fortælle hvordan jeg laver sådan
en glemt password tingest ?
Jeg har jo en MySQL med navn, email og password
Hvordan laver man sådan at brugeren i en form skriver sin mail adresse, og
så skal PHP siden ind og finde brugerens password ?
Sikkert simpelt, men hvordan ? please....
MVH
Kemster ( the nOOb guy )
P.S. Jeg turd snart ikke at skrive mere i denne gruppe. *S*
| |
Jakob Møbjerg Nielse~ (29-08-2002)
| Kommentar Fra : Jakob Møbjerg Nielse~ |
Dato : 29-08-02 16:50 |
|
Kemster wrote:
> Er der ikke en af jer venlige sjæle der kan fortælle hvordan jeg
> laver sådan en glemt password tingest ?
Jo, ser du... (en meget lignende tråd kører i ASP gruppen):
Når brugeren registrerer sig med navn og password, skal du kryptere
password'et inden det lægges i databasen:
"INSERT INTO users (password) VALUES (".md5(password).")"
Når brugeren så logger ind, henter du password'et (der nu er krypterer)
fra databasen og sammen ligner med den krypterede version af det
password som brugeren tastede ind. Altså noget lignende:
if (strcmp(md5($brugerens_pass), $pass_fra_db) == 0) {
//Password godkendt
} else {
//Prøv igen
}
At password'et ligger krypteret i databasen, betyder dog at serveren
ikke længere kan finde den originale værdi, og derfor kan man ikke sende
det til brugeren. I stedet gør man det, at man genererer et nyt
tilfældigt password og opdaterer databasen med det nye password
(krypteret, selvfølgelig). Desuden sender man en ukrypteret version af
password'et til brugerens email-adresse, og beder brugeren om at ændre
det snarest.
Hvis der er den mindste ting du ikke forstår, så spørg... sikkerhed er
ikke kun for sjov
--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.
| |
Jakob Møbjerg Nielse~ (29-08-2002)
| Kommentar Fra : Jakob Møbjerg Nielse~ |
Dato : 29-08-02 17:04 |
|
Jakob Møbjerg Nielsen wrote:
> Når brugeren registrerer sig med navn og password, skal du kryptere
> password'et inden det lægges i databasen:
>
> "INSERT INTO users (password) VALUES (".md5(password).")"
Nu, da jeg snakker så meget om hvor vigtig sikkerheden er, bør jeg nok
heller ikke undlade at nævne at et "salt" er strengt nødvendigt, da to
personer med samme password, eller vil få den samme krypterede værdi.
Men i stedet for at skrive om det, henviser jeg til en god artikel jeg
fandt
http://www.onlamp.com/pub/a/php/2001/07/26/encrypt.html
--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.
| |
Jonas Koch Bentzen (29-08-2002)
| Kommentar Fra : Jonas Koch Bentzen |
Dato : 29-08-02 17:31 |
|
Jakob Møbjerg Nielsen wrote:
>
> Nu, da jeg snakker så meget om hvor vigtig sikkerheden er, bør jeg nok
> heller ikke undlade at nævne at et "salt" er strengt nødvendigt
Hvor angiver man det? md5() har ikke noget argument til salt.
> da to
> personer med samme password, eller vil få den samme krypterede værdi.
Jeg kan ikke umiddelbart se det store sikkerhedsmæssige problem i det,
men det kan da godt være, jeg tager fejl.
| |
Jakob Møbjerg Nielse~ (29-08-2002)
| Kommentar Fra : Jakob Møbjerg Nielse~ |
Dato : 29-08-02 23:22 |
|
Jonas Koch Bentzen wrote:
> Hvor angiver man det? md5() har ikke noget argument til salt.
Så kan man jo lave det selv, eller også kan man bruge crypt() (men den
er afhængig af serverens krypteringsbiblioteker).
> Jeg kan ikke umiddelbart se det store sikkerhedsmæssige problem i det,
> men det kan da godt være, jeg tager fejl.
Det er ikke pænt .
--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.
| |
Jonas Koch Bentzen (30-08-2002)
| Kommentar Fra : Jonas Koch Bentzen |
Dato : 30-08-02 10:02 |
|
Jakob Møbjerg Nielsen wrote:
> Jonas Koch Bentzen wrote:
>
>>Hvor angiver man det? md5() har ikke noget argument til salt.
>
>
> Så kan man jo lave det selv
Hvordan vil du lave et salt, der påvirker md5()?
, eller også kan man bruge crypt() (men den
> er afhængig af serverens krypteringsbiblioteker).
Og det er md5() ikke? Man risikerer ikke noget ved at flytte sine
scripts fra f.eks. Linux til FreeBSD? (Det problem kan man som du selv
antyder nemlig godt komme ud for med crypt()).
>>Jeg kan ikke umiddelbart se det store sikkerhedsmæssige problem i det,
>>men det kan da godt være, jeg tager fejl.
>
>
> Det er ikke pænt .
Det argument kan jeg normalt godt acceptere, men ikke her :) Normalt er
brugernavnet eller ID-nummeret i databasen det unikke, der identificerer
brugeren. At visse brugere så har ens adgangskode er for mig at se ikke
noget problem - ligegyldigt, om adgangskoden er krypteret eller ej.
| |
Niels Andersen (30-08-2002)
| Kommentar Fra : Niels Andersen |
Dato : 30-08-02 10:27 |
|
Jonas Koch Bentzen wrote in <akncbf$k8f$1@sunsite.dk>:
>>>Hvor angiver man det? md5() har ikke noget argument til salt.
>> Så kan man jo lave det selv
> Hvordan vil du lave et salt, der påvirker md5()?
Et rent gæt:
$krypteret_med_salt = md5($salt.$ukrypteret);
> , eller også kan man bruge crypt() (men den
>> er afhængig af serverens krypteringsbiblioteker).
> Og det er md5() ikke?
crypt() dækker over flere forskellige krypteringsmetoder. Du kan kun bruge
dem, der er tilgængelige på den pågældende server.
md5() bruger altid metoden "MD5". Den er specificeret meget specifikt, og er
altid det samme.
> Man risikerer ikke noget ved at flytte sine
> scripts fra f.eks. Linux til FreeBSD?
Nej. MD5 er altid det samme.
> (Det problem kan man som du selv
> antyder nemlig godt komme ud for med crypt()).
Nemlig.
[to ens passwords giver to ens krypterede passwords]
> Normalt er
> brugernavnet eller ID-nummeret i databasen det unikke, der identificerer
> brugeren. At visse brugere så har ens adgangskode er for mig at se ikke
> noget problem - ligegyldigt, om adgangskoden er krypteret eller ej.
Hvis først man har skaffet sig listen med krypterede kodeord, og har knækket
ét kodeord, så kan man nemt finde andre brugere med samme kodeord.
Og kodeord er desværre ikke så unikke, som man kunne ønske sig. :)
--
Mvh.
Niels Andersen
(la nels. anersyn.)
| |
Jakob Møbjerg Nielse~ (30-08-2002)
| Kommentar Fra : Jakob Møbjerg Nielse~ |
Dato : 30-08-02 10:39 |
|
Jonas Koch Bentzen wrote:
> Hvordan vil du lave et salt, der påvirker md5()?
$salt = "1234abc"
$pass = md5($salt."password")
$pass = $salt.$pass
Saltet her er dog ikke et "ægte" MD5-salt, men det er trivielt at ændre.
Et rigtigt MD5 krypteret password med salt (der vist nok er 12 tegn
langt) er noget a la:
$1$u847YU8Dyth8$EtKryPtERetPasSWoRD
Det er i hvert fald *nix-style. $1$ er det der angiver at der er tale om
MD5.
> Og det er md5() ikke? Man risikerer ikke noget ved at flytte sine
> scripts fra f.eks. Linux til FreeBSD? (Det problem kan man som du selv
> antyder nemlig godt komme ud for med crypt()).
Hvis jeg ikke tager helt fejl, bruger md5() en intern algoritme,
hvorimod crypt() bruger styresystemets. crypt bruger vist DES som
standard, men hvis den ikke findes vælges et alternativ. Man kan dog
selv styre det med crypt("password", CRYPT_MD5), men den vil fejle hvis
ikke der er et MD5 bibliotek på serveren
> At visse brugere så har ens adgangskode er for mig at se ikke noget
> problem - ligegyldigt, om adgangskoden er krypteret eller ej.
Nej, det er ikke noget problem at de har samme adgangskode, det skal
bare ikke kunne ses. Hvis en ond bruger får fat i DB'en, kan han hurtigt
se om der er nogen med det samme password. Og man skal ikke afvise at
han måske kan bruge det til noget... onde brugere har som regel en meget
god fantasi (første skridt er jo netop at få fat i DB'en).
--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.
| |
Jakob Møbjerg Nielse~ (30-08-2002)
| Kommentar Fra : Jakob Møbjerg Nielse~ |
Dato : 30-08-02 10:46 |
|
Jakob Møbjerg Nielsen wrote:
> Man kan dog selv styre det med crypt("password", CRYPT_MD5)
Sludder og vrøvl
Man kan *tjekke* om MD5 er understøttet, vha. CRYPT_MD5. Det er en
konstant der bliver sat til 1, hvis MD5 understøttes. Hvis man vil bruge
MD5 kryptering skal man angive det ved at skrive $1$ foran sit salt:
crypt("password", '$1$djeirkf8ti6u$')
"Det er stadig tidligt for en natteravn"
--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.
| |
Kemster (31-08-2002)
| Kommentar Fra : Kemster |
Dato : 31-08-02 15:29 |
|
Ville bare lige indskyde at det er en nOOb der har stillet spørgsmålet, og
jeg har det bedst med at få skåret det lidt ud i pap... he he
Jeg vil ihvertfald sige at det er LÆNGE siden jeg blav "afsporet"
MVH
Kemster ( nOOb )
| |
Peter Brodersen (01-09-2002)
| Kommentar Fra : Peter Brodersen |
Dato : 01-09-02 23:52 |
|
On Fri, 30 Aug 2002 11:02:11 +0200, Jonas Koch Bentzen
<ingen.email@eksempel.dk> wrote:
>, eller også kan man bruge crypt() (men den
>> er afhængig af serverens krypteringsbiblioteker).
>Og det er md5() ikke?
Nej, MD5 er defineret i RFC1321:
http://rfc.sunsite.dk/rfc/rfc1321.html
Af kuriøsiteter kan nævnes, at MD5 kan findes som funktioner til en
del sprog, der ikke har implementeret dem som en native funktion, fx
Javascript < http://pajhome.org.uk/crypt/md5/>, ActionScript
< http://flashexperiments.insh-allah.com/md5.html> og ASP
< http://rossm.net/Electronics/Computers/Software/ASP/MD5.htm> (folk må
gerne kommentere, hvis jeg er endnu én i rækken, der omtaler ASP som
et sprog fremfor et framework)
--
- Peter Brodersen
| |
|
|