[PHP] Veilig login systeem *

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezg met een php-site waarin vertrouwelijke gegevens staan. Ik wil dus een veilig inlog systeempje maken. Hoe kan ik dit het best doen?
Ik heb nu 2 pagina's. De eerste pagina is gewoon een formulier met als action pagina 2
Op die pagina 2 controleer ik password en username met gegevens uit de database. Wanneer dat goed is, zet ik session_id() in de database bij de ingelogde bezoeker. bovendien wordt sessionid en username in 2 sessies gezet.
Op pagina 3, met persoonlijke gegevens, wil ik alleen laten zien wanneer username en sessionid uit de database overeenkomen met de username en sessionid die opgeslagen zijn in de 2 sessies.

Is dit veilig genoeg? of kan het veel veiliger? Andere manier?Is dit te 'hacken'?

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
In principe is daar een veiling inlog-systeem mee te maken. Zolang je zelf ook maar zorgt dat het netjes geprogrammeerd is en er geen levensgrote gaten in zitten.

Acties:
  • 0 Henk 'm!

Verwijderd

Ja, dit is te hacken, maar dat is met alle systemen zo :)

3 tips om het veiliger te maken

Sla niet het wachtwoord op in de database, maar een versleutelde versie daarvan.
Gebruik bijvoorbeeld een MD5 hash. Als iemand inlogt versleutel je het ingegeven wachtwoord en vergelijkt het resultaat met de opgeslagen versie. Geen idee of dit kan in PHP, sorry. Als iemand dan de database in komt kan die er nog niets mee.

Gebruik de POST method in je form. Dan komen de inloggegevens niet in de URLS in de weblogs.

Gebruik https.
Met http kan iedereen die tussen de browser en server zit de inloggegevens onderscheppen.

Acties:
  • 0 Henk 'm!

  • freddifish
  • Registratie: November 2000
  • Laatst online: 12-09 13:02

freddifish

schnappi !

doet dit niet wat je wilt ?
http://www.phpsecurepages.com/index.php

'people say I'm a drinker, but I'm sober half the time' - Mick Jagger | mail: freddifish_AT_gmx.net


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 04 juli 2003 @ 15:07:
Sla niet het wachtwoord op in de database, maar een versleutelde versie daarvan.
Gebruik bijvoorbeeld een MD5 hash. Als iemand inlogt versleutel je het ingegeven wachtwoord en vergelijkt het resultaat met de opgeslagen versie. Geen idee of dit kan in PHP, sorry. Als iemand dan de database in komt kan die er nog niets mee.
Het is altijd simpeler dan je denkt ;):
PHP:
1
md5($password);

Acties:
  • 0 Henk 'm!

Verwijderd

Bij de test:
met username: test en password: bier

password incorrect

met username: bier en password sjaak

user does not exist.

Les 1: laat de mensen er niet achter komen of een username bestaat, als ze een username brute forcen kunnen ze daar weer een password bij brute forcen :)

Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Ik heb het nu zo gedaan:

1. md5 username en password
2. genereer random code
3. plak de randomcode achter de username en password
4. sla alles op in een sessie
5. haal de gecodeerde username en pass uit de db
6. plak de randomcode achter de username en password uit de db
7. vergelijk alles
8. .... en klaar is clara .... :Y)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 04 July 2003 @ 15:07:
Sla niet het wachtwoord op in de database, maar een versleutelde versie daarvan.
Gebruik bijvoorbeeld een MD5 hash. Als iemand inlogt versleutel je het ingegeven wachtwoord en vergelijkt het resultaat met de opgeslagen versie. Geen idee of dit kan in PHP, sorry. Als iemand dan de database in komt kan die er nog niets mee.
md5() werkt ;)
en een md5 is met bruteforce wel te achterhalen wat een mogelijk password is ;)
Gebruik https.
Met http kan iedereen die tussen de browser en server zit de inloggegevens onderscheppen.
https != veilig

je kan nog zo'n mooi https systeem bouwen, als er ook maar ergens een lekje/bugje zit heb je er helemaal niets aan.
met https zorg je er alleen voor dat data die verstuurd wordt niet direct te lezen is.

Acties:
  • 0 Henk 'm!

Verwijderd

@ Erkens

Tuurlijk heb je gelijk.
Ik heb tips gegeven om het veiliger te maken. Ik beweer nergens dat het waterdicht is. Mijn eerste opmerking is zelfs dat alle systemen te hacken zijn

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

en een md5 is met bruteforce wel te achterhalen wat een mogelijk password is
Mwah als je bedenkt dat het met alle computers op deze wereld samen nog steeds langer duurt dan de gemiddelde levensduur van een mens is dat wel samen te vatten tot niet :)

Tenzij je na 0.01% van de 'keyspace' natuurlijk al raak hebt ;)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

Verwijderd schreef op 04 July 2003 @ 15:35:
[...]

Les 1: laat de mensen er niet achter komen of een username bestaat, als ze een username brute forcen kunnen ze daar weer een password bij brute forcen :)
Das nogal een consessie die je moet doen dan voor je interaction design.. Want die vraagt juist WEL om een duidelijk gespecificeerde foutmelding voor de gebruiker ;)

En imho weegt dat een stuk zwaarder dan een iets minder te brute-forcen wachtwoorden systeem.

Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 11:40
Geef de gebruiker gewoon een fatsoendelijke foutmelding en zeg wat er gebeurd.

Brute force cracken is niet echt iets wat je even voor de lol gaat doen dus dan moet er ook een giga streven zijn....

Verder alle user input checken en ip's opslaan voor het geval dat...

|>


Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
Ik vind een foutmelding als:

"De combinatie van gebruikersnaam en wachtwood in onjuist."

altijd wel goed genoeg. Dan verklap je niet wat er precies fout is en de persoon die probeert in te loggen weet als het goed is genoeg.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

curry684 schreef op 04 juli 2003 @ 15:57:
[...]

Mwah als je bedenkt dat het met alle computers op deze wereld samen nog steeds langer duurt dan de gemiddelde levensduur van een mens is dat wel samen te vatten tot niet :)

Tenzij je na 0.01% van de 'keyspace' natuurlijk al raak hebt ;)
woordenboek woorden ;)
die bruteforce testen is zo gepiept hoor ;)

ik bedoelde uiteraard niet alle mogelijkheden want dat is idd niet te doen :P
eborn schreef op 04 juli 2003 @ 16:38:
Ik vind een foutmelding als:

"De combinatie van gebruikersnaam en wachtwood in onjuist."

altijd wel goed genoeg. Dan verklap je niet wat er precies fout is en de persoon die probeert in te loggen weet als het goed is genoeg.
ik doe meestal:

"De combinatie van gebruikersnaam en/of wachtwood in onjuist."

klein verschil maar wel duidelijker

Acties:
  • 0 Henk 'm!

Verwijderd

mja, ik heb nog een kleine toevoeging voor het bruteforce attack.

Ik zorg ervoor dat de gebruiker een sessie aanmaakt bij het komen op de site, die neem ik mee naar de inlog pagina (geen sessie = geen inlog pagina).

dan mag de gebruiker 3 keer proberen om in te loggen, anders probeer ik via de sessie en aparte ip controle de gebruiker 15 sec te blokkeren. En als hij F5 drukt dan wordt er gewoon weer een pagina geladen met timer voor refresh. En de invoer velden worden geblockeert dmv javascript tot de seconden om zijn.

naja zo kun je het doen. Kijk wel voor alle controle's

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
Erkens schreef op 04 July 2003 @ 16:43:
"De combinatie van gebruikersnaam en/of wachtwood in onjuist."
Euh, als het gebruikersnaam of wachtwoord is, dan is het toch geen combinatie meer? :)

Acties:
  • 0 Henk 'm!

  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 13-08 08:00
vind jij "De eventuele combinatie van gebruikersnaam en/of wachtwood in onjuist." beter klinken dan ? :)

Acties:
  • 0 Henk 'm!

  • PieterJ
  • Registratie: Juli 2000
  • Laatst online: 12:46
Verwijderd schreef op 04 July 2003 @ 19:20:
mja, ik heb nog een kleine toevoeging voor het bruteforce attack.

Ik zorg ervoor dat de gebruiker een sessie aanmaakt bij het komen op de site, die neem ik mee naar de inlog pagina (geen sessie = geen inlog pagina).

dan mag de gebruiker 3 keer proberen om in te loggen, anders probeer ik via de sessie en aparte ip controle de gebruiker 15 sec te blokkeren. En als hij F5 drukt dan wordt er gewoon weer een pagina geladen met timer voor refresh. En de invoer velden worden geblockeert dmv javascript tot de seconden om zijn.

naja zo kun je het doen. Kijk wel voor alle controle's
Dit kan je uitbreiden naar het volgende:
Bij x maal een foutief wachwoord word de betreffende user geblokkeerd.
Bij y maal een foutieve user van af een bepaald IP blokeer je dat IP adress, zodat er niet meer ingelogd kan worden.

Misschien niet erg charmant en kan je als beheerder een hoop werk kosten doordat je regelmatig statussen moet goed zetten. Het ligt er maar net aan hoe vertrouwlijk je gegevens zijn.

[ Voor 2% gewijzigd door PieterJ op 04-07-2003 19:47 . Reden: Typo ]


Acties:
  • 0 Henk 'm!

Verwijderd

gewoon, bij zoveel x foutief wachtwoord, mag je 5 min. niet inloggen..

bespaart je een hoop unlock werk, en brute forcen werkt ook niet meer :)

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
Mayco2 schreef op 04 July 2003 @ 19:34:
vind jij "De eventuele combinatie van gebruikersnaam en/of wachtwood in onjuist." beter klinken dan ? :)
Nee, dat klinkt nog erger :) Het ging mij alleen om het of-gedeelte, daarom gebruik ik hem ook altijd met alleen 'en'.

Acties:
  • 0 Henk 'm!

Verwijderd

ik gebruik: "Gebruikersnaam en/of wachtwoord is onjuist"

klopt altijd dus..

Acties:
  • 0 Henk 'm!

  • eborn
  • Registratie: April 2000
  • Laatst online: 16-09 09:14
Verwijderd schreef op 04 July 2003 @ 20:09:
ik gebruik: "Gebruikersnaam en/of wachtwoord is onjuist"
klopt altijd dus..
"Gebruikersnaam en wachtwoord is onjuist"... :P

Maar goed, we dwalen enorm af ;)

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

offtopic:
De taal/omgeving waar je topic om draait hoort in rechte haken voor je topictitle te staan. Fixed bij deze :)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

als je de bovenstaande methode hanteerd die ik beschreven heb met de toevoegingen die zijn gegeven. Dan kun je betere foutmeldingen geven :) en heb je het ook nog netjes en veilig opgelost.

er zijn veel verschillende kleine technieken en details maar ik zou even heb web afzoeken naar uitleg en voorbeelden.
Pagina: 1