Beveiligen gebruikersnaam / wachtwoord

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Obelix Idefix

Obelix Idefix

24/06/2012 17:26:38
Quote Anchor link
Aangeraden wordt om in ieder geval het wachtwoord, maar eventueel ook de gebruikersnaam beveiligd op te slaan. MD5 wordt afgeraden; te gemakkelijk te achterhalen wat origineel is.

Op http://nl3.php.net/manual/en/function.crypt.php eens rondgekeken.
Als ik dan onder 'Example #3 Using crypt() with different hash types' kijk, valt mij op dat in de 2e parameter (bijna) geheel terug komt in het resultaat. Als iemand dan toegang heeft tot de database, dan weet die toch ook wat de 'vertaalslag' is?

Of maak ik ergens een (denk)fout?
 
PHP hulp

PHP hulp

22/11/2024 10:37:52
 
Koen Vlaswinkel

Koen Vlaswinkel

24/06/2012 17:31:24
Quote Anchor link
In plaats van crypt kan je beter hash gebruiken. Zie http://nl3.php.net/manual/en/function.hash.php Dit beveelt deze man ( http://jes.blogs.shellprompt.net/2007/03/30/hash-or-crypthash-or-crypt/ ) ook aan.
 
Wouter J

Wouter J

24/06/2012 17:38:36
Quote Anchor link
De 2 parameter is een salt, een salt komt altijd volledig terug in een wachtwoord, op plaats 1. Dus het is heel normaal denk ik?
 
Obelix Idefix

Obelix Idefix

24/06/2012 17:51:51
Quote Anchor link
@Koen, dat artikel is uit 2007. Op http://phpmaster.com/why-you-should-use-bcrypt-to-hash-stored-passwords/ (uit 2011) wordt aangegeven dat bcrypt (momenteel) de meest veilige manier zou zijn. bcrypt kan via de functie crypt worden uitgevoerd.

@Wouter: als de salt leesbaar terugkomt, wat is dan de toegevoegde waarde van een salt?
 
Crispijn -

Crispijn -

24/06/2012 18:00:48
Quote Anchor link
Je weet als hacker niet waar de salt in het wachtwoord wordt toegepast. Daarnaast kan je ook nog een statische pepper gebruiken. Zo wordt het inderdaad niet onmogelijk, maar wel steeds ingewikkelder.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

24/06/2012 20:30:27
Quote Anchor link
Obelix en Idefix op 24/06/2012 17:26:38:
Als iemand dan toegang heeft tot de database, dan weet die toch ook wat de 'vertaalslag' is?


Als iemand die toegang al heeft dan heeft ie toch al alle informatie toe zijn beschikking.
Als je echt wilt beveiligen moet je gewoon met SSL werken.
 
Obelix Idefix

Obelix Idefix

24/06/2012 21:45:55
Quote Anchor link
Ger van Steenderen op 24/06/2012 20:30:27:
Als iemand die toegang al heeft dan heeft ie toch al alle informatie toe zijn beschikking.

Dan zou het gecodeerd opslaan van gegevens in een database dus eigenlijk zinloos zijn?

Ger van Steenderen op 24/06/2012 20:30:27:
Als je echt wilt beveiligen moet je gewoon met SSL werken.

SSL is dat je werkt met https (?). Is dat voor de 'gemiddelde' verenigingssite niet wat te veel van het goede? Dat doen ze op phphulp niet eens :s
 
Wouter J

Wouter J

24/06/2012 21:52:32
Quote Anchor link
Ja, SSL is https en of het niet wat te veel van het goede is, geen idee.

En ik zou altijd het wachtwoord coderen, de rest hoeft niet per se. Een salt lijkt inderdaad nutteloos, behalve als je het goed doet en een dynamische salt gebruikt, zoals uniqid of een hashing van de registreerdatum van de gebruiker.
 
Obelix Idefix

Obelix Idefix

26/06/2012 18:54:08
Quote Anchor link
Crispijn - op 24/06/2012 18:00:48:
Je weet als hacker niet waar de salt in het wachtwoord wordt toegepast.

Hoe bedoel je dat? Jouw idee is om het wachtwoord op te splitsen in twee delen en daar tussen een salt te plaatsen?

Wouter J op 24/06/2012 21:52:32:
Een salt lijkt inderdaad nutteloos, behalve als je het goed doet en een dynamische salt gebruikt, zoals uniqid of een hashing van de registreerdatum van de gebruiker.

Maar uniqid zul je ergens moeten opslaan, zodat je die later weer kunt gebruiken om te controleren. Sla je die dan in een database op?
En die lag al op straat...

Ik begrijp dat plaintext opslaan geen optie is. Dan wordt het wel heel makkelijk. Maar als in de database te zien is wat gebruikt is om het wachtwoord te beveiligen, dan is het dus alleen om de hacker het (misschien) wat moeilijker te maken(?).
 
Wouter J

Wouter J

26/06/2012 19:26:59
Quote Anchor link
Uniqid is een combinatie van microtime en nog wat dingen en bestaat altijd uit 13 characters. Deze kun je dus altijd met substr eraf halen.
Het beste is je wachtwoorden hashen met een sleutel die je zelf invoert en in je script blijft en vervolgens een random salt + pepper of 1 van die 2 static erbij te plaatsen. Dat is dan nauwelijks te hacken.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

26/06/2012 21:43:08
Quote Anchor link
wat ik wilde zeggen is dat als je eenmaal toegang hebben tot de database het zinloos is om een wachtwoord gehashed op te slaan. Dus dat is het eerste wat beveiligd moet worden.
 
B Polak

B Polak

26/06/2012 21:49:53
Quote Anchor link
Ger van Steenderen op 24/06/2012 20:30:27:
Obelix en Idefix op 24/06/2012 17:26:38:
Als iemand dan toegang heeft tot de database, dan weet die toch ook wat de 'vertaalslag' is?


Als iemand die toegang al heeft dan heeft ie toch al alle informatie toe zijn beschikking.
Als je echt wilt beveiligen moet je gewoon met SSL werken.


SSL (HTTPS) versleuteld ALLES en moet dus de complete website door een codeersysteem heen. En bij de client wordt alles vervolgens weer terug gecodeerd d.m.v. een unique key.

Zeer veilig, maar levert wel echt veel vertraging op. Synchroniserende scripts (dynamische websites) zal hierdoor niet optimaal presteren.

SSL niet aangeraden voor alleen username/password protection in je database.
Daarnaast is SSL niet bedoeld om data uit je database te beschermen, althans indirect. De bedoeling van SSL is om data tussen server en client gecodeerd te hebben, zodat data-sniffing (door bijv. hackers) niet mogelijk is omdat alle tekst versleuteld is.
Wordt voornamelijk gebruikt bij betalingen (creditcard gegevens e.d.)

Tip:

Forms dichtgooien met anti SQL-injectie script.
En voornaamste is e-mailadres en wachtwoord crypte.
Gewijzigd op 27/06/2012 00:42:25 door B Polak
 
De VeeWee

de VeeWee

27/06/2012 08:19:43
Quote Anchor link
Via SSL (HTTPS) zorg je er voor dat je geen man-in-the-middle attack hebt. Dit wilt zeggen: stel dat je in een internetcafé over http uw wachtwoord en naam invoert, dan kan een netwerk scraper dit pakketje vinden en gebruiken om uw wachtwoord+gebruiker te vinden. Hierdoor zijn er ook session hijacks mogelijk op slechte systemen.
Aanmelden via SSL is een mooie extra om uw gebruikers veilig te laten inloggen in alle geval. Dit geld natuurlijk ook voor alle andere data dat je over de http lijn stuurt.

Bij het veilig maken van wachtwoorden moet je er eigenlijk voor zorgen dat alles zo traag mogelijk is. De gebruiker gaat het echt niet erg vinden om even te moeten wachten als hij zeker is dat alles veilig is. Het gaat dan ook maar over 1 login.

Bij wachtwoorden opslaan in de database, moet je er ook voor zorgen dat de hash zeer traag gemaakt kan worden. Dit wilt zeggen: als je een hash traag maakt, dan wordt deze ook traag om te kraken. Daarom gebruik je bcrypt:

In bcrypt kan je instellen hoe traag het hashen van een wachtwoord is. Deze methode maakt dan gebruik van een random salt om uw wachtwoord op te slaan. Dit maakt het dus onmogelijk om rainbow attacks uit te voeren op uw database. Deze hash kan dan gebruikt worden tijdens het verifieren van uw wachtwoord. Je gebruikt deze hash dan eigenlijk opnieuw als salt voor uw wachtwoord.

Hier vind je meer info:
http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html

Een voorbeeld heb ik geplaatst helemaal onderaan de topic in:
http://www.phphulp.nl/php/forum/topic/beveiligings-script-is-het-veilig/85133/

Je ziet dus dat je door het aanpassen van een parameter het coderen langer kan laten duren. Bruteforcen wordt op deze manier een hel!

Natuurlijk moet je proberen om al uw code zo waterdicht mogelijk te maken. Hier kan je in mijn ogen dan best een framework voor gebruiken. Daar zijn dikwijls dingen zoals sql injections al volledig in tegengegaan.
Gewijzigd op 27/06/2012 08:21:39 door de VeeWee
 
Bas de jong

Bas de jong

27/11/2012 04:50:55
Quote Anchor link
ik ben hier ook mee bezig en had het volgende idee.

als je nou een geheime sleutel toevoegd(vanuit een beveiligde map of een map boven je rootmap) aan de gehashte stringmetsalt

zou dat misschien een goed alternatief zijn op de https
 
Frits Katoen

Frits Katoen

27/11/2012 09:28:45
Quote Anchor link
Wouter J op 24/06/2012 17:38:36:
De 2 parameter is een salt, een salt komt altijd volledig terug in een wachtwoord, op plaats 1. Dus het is heel normaal denk ik?


Een salt wordt altijd 'meegehashed' met het te coderen gegeven, anders zou je aan twee wachtwoorden al genoeg hebben om de salt eruit te filteren.

Stel mijn SALT is 'Kr0ket!'

Je slaat in de database dan het volgende wachtwoord op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
md5($_POST['wachtwoord'].'Kr0ket!');
?>

Dit levert een hash zonder 'Kr0ket!' erin, maar ook een andere hash dan de hash van alleen $_POST['wachtwoord'] zou leveren.

Ook dit systeem is uiteindelijk te kraken, maar een simpele lookup in een rainbowtable zal niet werken.
 
TJVB tvb

TJVB tvb

27/11/2012 09:49:14
Quote Anchor link
https (ssl) en salt/pepper i.c.m hash zijn bedoeld voor 2 totaal verschillende onderdelen.

https is bedoeld voor de beveiliging van de lijn tussen de client en server (gebruiker en website). (Tegen man in the middle attack, voorkomen dat de inhoud in logs van gateways e.d. komt etc)
SSL maakt de website wel iets zwaarder, maar dat verschil is minimaal. Bij mij gaat elke website die dat kan automatisch via https, browsers zijn heel snel in het encoderen en decoderen. SSL is verplicht voor websites waar je persoonsgegevens verwerkt. Dus als je leden administratie van de vereniging ook in de website zit moet je wel ssl hebben.

Het gebruik van salt en pepper i.c.m. hash is om het wachtwoord niet plaintext op te slaan. De salt en pepper maken rainbow tabels nutteloos waardoor iemand die de gegevens gestolen heeft niet de wachtwoorden rechtstreeks op andere websites kan gebruiken. Je hebt hiermee de tijd om je gebruikers te waarschuwen zodat ze hun wachtwoorden kunnen wijzigen. (Heel veel mensen hebben maar een paar of zelfs maar 1 wachtwoord dat ze overal gebruiken)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.