Hilfe für Loginscript im PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aktion
angreifer
angriffsseite
beachten
dank
datenbank
formular
funktion
gedanke
login
opfer
sagen
session
sicherheit
speichern
statement
system
tip
url
versuchen
-
Hallo miteinander
Nachdem ihr mir gestern mit meinem json Problem helfen konntet habe heute eine etwas generellere Frage. Und zwar auf was geachtet werden muss wenn man ein komplettes Login System in PHP schreiben will.
Ich habe einige Tutorials gesehen wie man es umsetzten könnte doch in Punkto Sicherheit sind alle unterschiedlich. MIr ist klar das ich ein PW niemals im Klartext in einer DB speichern soll doch welchen hash soll ich nehmen? MD5?
Bin für jeden Tipp oder Link, eventuell auch aus eigener Erfahrung, dankbar. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi
Kann dir zwar nicht viel zu deinem Problem sagen aber was ich weiss ist, dass md5 nicht mehr sicher ist und nicht mehr verwendet werden soll. -
Danke doch was wäre dein Tipp wenn man md5 nicht mehr verwenden soll?
-
sha512 zum Beispiel
natürlich gesalzen
Dann solltest du noch darauf achten, dass niemand über das Formular auf deine Datenbank zugreifen kann (mir wurde immer gesagt: Stichwort "Prepared Statements") und dass deine Steite XSS imun ist :D
*Liste nicht vollständig
Beitrag zuletzt geändert: 27.3.2016 12:07:29 von matthias-detsch -
Danke
"Prepared Statements" soll nach meinen Recheren zum verhindern von SQL-Injections genutzt werden.
Werde mir mal versuchen was zusammen zu bauen. Wer noch mehr Tipps hat gerne her damit. :) -
Grundlagen:
Der Server muss sicher sein. SQL-Injection und XSS müssen dir was sagen. Maskierungen sind oberste Pflicht, bevor man sich weitere Gedanken über Sicherheit macht.
Bezüglich des Passworts gibt es zwei Dinge zu beachten:
1. Rainbow-Tables
Es gibt Tabellen, in denen zu Milliarden von Passwörtern die passenden Hashs gespeichert sind. Man findet einige Cracker-Seiten im Internet, wo man nur noch den Hash eingeben muss und bei einem Treffer wird dann das zugehörige Passwort ausgespuckt. Deshalb ist ein purer Hashwert sehr unsicher. Der Hash sollte deshalb inmer mit einem Salt berechnet werden. (Am besten noch zufällig erzeugt und zusammen mit dem Hash abgespeichert.)
2. Brute Force
Wer ein Passwort aus einem Hashwert knacken will, kann Brute Force einsetzen. Ein einzelner Hash ist meist nach Mikrosekunden berechnet. Somit kann man Tausend bis Millionen Passwörter pro Sekunde ausprobieren. Wenn du den Hash-Algorithmus jetzt aufwändiger machst, z.B. indem du 1000 Hashwerte in einer Schleife berechnest, dann verzögert sich der Loginvorgang kaum wahrnehmbar, eine Brute-Force Attacke dauert aber 1000-Mal so lang.
=> Schau dir mal bcrypt an, dort werden diese zwei Punkte beachtet. Oder setze es selbst um.
Auch in Bezug zur Session sind einige Dinge zu beachten:
1. Session Hijacking
Ein Angreifer gelangt an das Sessioncookie eines angemeldeten Nutzers.
Gegenmaßnahmen: Die Session eine feste Zeit nach dem Login und auch nach einer gewissen Zeit Inaktivität ablaufen lassen.
2. Session Fixation
Ein Angreifer schiebt dem Opfer eine bestimmte Session-Id unter. Das Opfer meldet sich an und der Angreifer ist ebenfalls angemeldet.
Gegenmaßnahmen: Beim Login eine neue Session-Id vergeben.
3. Cross Site Request Forgery
Ein Angreifer erstellt eine Angriffsseite, die (z.B. mit Hilfe von Javascript) eine Aktion bei dir im Loginbereich ausführt. Ein Opfer ist bei dir bereits eingeloggt und besucht nun die Angriffsseite. Die Aktion wird nun, meist auch noch unbemerkt, mit den Rechten des Opfers durchgeführt.
Gegenmaßnahmen: Jedes Formular erhält ein "hidden"-Feld mit einem zufällig generierten Token. Beim Empfang muss geprüft werden, ob das Token gültig ist.
Zusammenfassung:
Mach dir Gedanken über die einzelnen Punkte. Nicht alles davon muss umgesetzt werden. Das ist abhängig davon, wie sicher dein System am Ende sein soll / wie viel du programmieren möchtest. -
@fuerderer
Danke für die vielen Tipps. Werde jetzt erst einmal versuchen ein Grundgerüst aufzubauen und anschliessend immer mehr Sicherheit integrieren. -
Hallo,
seit php 5.5.0 gibt es Funktionen für die Verschlüsselung... vielleicht bringt dich das ja schon etwas näher an die Lösung. -
Schau dir die von staymyfriend verlinkte password_hash und password_verify Funktion an. Die kümmert sich um alles was du brauchst - starker Hashalgorithmus und salt werden automatisch verwendet. Du musst lediglich den zurückgegebenen String in der Datenbank speichern (beachte die Hinweise zu dessen Länge!).
Das hat auch den Vorteil, dass, wenn ein neuer, stärkere Hashalgorithmus vorhanden ist, PHP neue Passwörter mit dem hashen kann, Du musst also nicht manuell den Code anpassen, wenn z.B. bcrypt obsolet wird.
Beitrag zuletzt geändert: 27.3.2016 14:44:19 von davidlw -
Danke für den Tipp. Das macht es einem ja ziemlich einfach. War am Anfang etwas verrwirt als ich die ganz Salt sache gelesen habe.
-
https://www.php-einfach.de/experte/php-codebeispiele/loginscript/
Diese Anleitung hat mir geholfen mein erstes Login Skript zu schreiben -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage