title image


Smiley Re: user und pass sicher!
für sessions siehe die frage von Cybermage, da hab ich ne URL gepostet etwas weiter unten.



zum generellen thema sicherheit. ich habe auch schon memberbereiche entwickelt und habe es so gemacht.

=================================================================================================

ACHTUNG: holt euch schonmal nen kaffee und ne schachtel kippen, das wird etwas länger :D:D:D

=================================================================================================



daten die ich vom benutzer benötige:



name

passwort

passwortbestätigung

geheimfrage <-- kann nie durch den benutzer geändert werden

geheimantwort <-- kann nie durch den benutzer geändert werden



jetzt fragen sich einige bestimmt, warum geheimfrage und geheimantwort. beim punkt sicherheit, grade wenn es um wichtige daten geht, kann die kriminelle energie höher oder niedriger sein. aber ein höhere sicherheitsstandart macht es für den normalenbenutzer manchmal nicht einfacher.



was passiert wenn der benutzer sein pw verliert ? dann kann er sich es zumailen lassen .. ok ... ist ne möglichkeit. und was macht ihr wenn er kein zugriff mehr auf sein emailkonto hat ??? wer nimmt euch die entscheidung ab, ob es wirklich der richtige ist ? dumme sache !



deswegen kann man als letzte instanz als admin dem benutzer diese geheimfrage stellen, die er richtig beantworten muss. wenn ein krimineller dritte diese frage beantworten kann, dann ist der bnutzer selbst schuld, denn es soll ja ne frage sein, die nur er beantworten kann.



aber das ist z.B. ne möglichkeit, dem benutzer nicht gleich seinen account zu löschen wenn oben genanntes eintritt. so art letzte chance.



nun aber zum eigentlichen thema:



wenn der benutzer sich anmeldet, dann pürüft ihr erstmal, ob die beiden passwörter übereinstimmen. am besten mit javascript weil das clientseitig ist und somit keine daten gesendetb werden müssen.



dann tragt ihr den benutzer in die datenbank: passwörter sollten IMMER verschlüßelt in die Datenbank geschrieben werden. warum erkläre ich gleich.



dazu macht ihr nen normalen insert wobei ihr vorher folgendes macht.



$pw = md5($pw);



damit ist das pw mit dem md5 algorythmus verschlüßelt. das ist ein hash, der niemals zurückgerechnet werden kann. (brauchen wir ja auch nicht :))



zusätzlich solltet ihr eine tabelle new_users anlegen:

dort stehen folgende felder drinne:



id | user_id | free_id | datum



id sollte klar sein ... ist ne laufende nummer als schlüßel, braucht man zwar nicht unbedingt, aber ich baue sie IMMER mit ein.



user_id erklärt sich von selbst



datum erklärt sich von selbst



und nun die free_id: das ist eine id, die ihr gleichzeitig mit dem anlegen des users generiert. ich generiere sie immer aus der markotime, die ich vorher mit nem zufalsswert zwischen 1 - 10.000 multipliziere. so schließe ich aus, dass sich 2 benutzer auf die sekunde genau gleichzeitig registreieren und die selbe free_id bekommen.



warum verschlüßelt schreiben ???

selbst wenn jmd das verschlüßelte pw sieht kann er damit garnichts anfangen weil eine direkteingane dieses hashes wieder einen neuen hash generieren würde.



bsp hier:



$pw = "login_programmieren";

$pw = md5($pw);



da steht jetzt z.B. in $pw das hier: 23fc2985c5b262397f388fff36b9d9a2



wenn ich jetzt diesen hash als pw eingeben würde dann käme das hier raus: 7fdb575ec3ed3d62d6fefc976169b258



(für alle klugen die jetzt testen ob das stimmt ... ja ich die beiden hashes grad generiert hab :P)



kommen wir zu der bestätigungsmail:



in der mail verweist ihr auf einen php-datei, die die free_id mit dem namen überprüft. wenn das beides stimmt, dann schaltet ihr den account erst frei.



nebenbei würde ich in dieser datei immer gleich ne prüfung machen ob einer einträge ein älteres datum als 1 - 2 wochen hat. so beseitigt ihr den müll von fehlgeschlagenen bzw. doppelanmeldung. nicht vergessen, die passende user_id aus der tabelle der users mitzulöschen.



jetzt könnt ihr den benutzer auch gleich einloggen bzw. ne session anlegen. das ist dann schon comfordvoller.



zu den sessions:

hier scheiden sich so mancher geister. es gibt einige entwickler, die schreiben das user und pw mit in die session. mache ich nicht. bei mir steht lediglich die id des benutzer drins.



wie überprüfe ich ob er nun berechtigt ist ??? tjo ... wenn er ne session hat, dann hat er sich auch schonmal eingeloggt und dann kann ich ihm auch den zugriff erlauben.



Schutzmechanismen:



1. Nach 3 falschen Anmeldungen sperre ich den Account. Sende ne Mail zum Admin und logge bei jedem falschen Eingeben die IP mit.



2. Falsche Anmeldeversuche insgesamt werden gezählt und dem Benutzer angezeigt.



3. Nach der 1. falschen Anmeldung sperre ich den Account für 15 sekunden, nach der 2. für 1 Minute. (sehr sinnvoll um bruteforce attacken vorzubeugen, wenn man accounts nicht nach 3 falscheingaben sperren läßt. ist übrigens auch normaler standard bei anderen sicherheitskritischen systemen wie pin-eingabe zu sicherheitsgebäuden und so)



sooo ich glaube das war er erstmal so im groben und ganzen ... wer sinnvolle ergänzungen hat, immer her damit ... vielleicht kann man daraus mal ein schönes tutorial machen.
mfg

acid
-
|[Wenn du alles weißt, dann weißt du, dass du nichts weißt]|

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: