Schroeerg schrieb:
funktionsfähiges Login/Registrations-Formular gescriptet habe (auf SQL-Basis), möchte ich nun die Sicherheit einbauen.
Sicherheit wird nicht nachträglich eingebaut. Sicherheit ist ein Prozess, der von Anfang an bei der Programmierung eine wichtige Rolle spielen muss. Sicherheit ist nicht gegeben oder nicht gegeben. Dieses Schwarz-Weiß Denken ist ein großer Fehler.
Wenn du nachträglich eine ganzes System sicher machen willst, bei dem bisher nicht an Sicherheit gedacht wurde, dann musst du viel Zeit und Geld für einen kompletten Audit investieren, mit fraglichen Aussichten.
JohnnieWalker schrieb:
auf jeden fall ist es bei nem loginsystem wichtig, session zu benutzen, dabei habe ich in einigen foren gelesen, dass man ggf noch die IP in ner db sichern sollte, und dann bei jedem seitenaufruf vergleichen sollte..
Dass man unbedingt PHP sessions für ein sicheres Loginsystem einsetzen muss, ist Blödsinn, und dass mit der IP ist ein Randfeature, dass in Ausnahmefällen den Schaden begrenzen kann.
Wie man Code sicher macht, kann man nur wissen wenn man den gesamten Code untersucht und Angriffsszenarien durchgeht.
Um ein paar unheimlich pauschalisierte, aber vielleicht dennoch hilfreiche Sicherheitstipps zu geben, die bei normalen PHP code für den Webgebrauch eine Rolle spielen könnten:
- jegliche, nicht vom Code selber stammende Daten müssen als nicht vertrauenswürdig gelten und müssen entsprechend zu verschiedenen Anlässen 'escaped' werden:
- PHP --> Webserver (bei HTML Ausgabe): html escaping gegen XSS, zb mit htmlspecialchars() - wenn die Ausgabe nicht in HTML stattfindet, dann muss sie dementsprechend anders escaped werden (zb bei JSON, oder XML).
- PHP --> SQL: SQL escaping gegen SQL injection, zb mit mysql_real_escape_string()
- Passwörter in der Datenbank sollten mit einem starken Hash mit einem zufälligen salt abgespeichert werden (zb salted SHA1, nicht einfach nur MD5)
- der ganze Code sollte so modular wie möglich geschrieben werden, ohne "doppeltem" Code (Code an verschiedenen Stellen, der aber das gleich macht)
- beim Schreiben des Codes musst du nicht nur an die Funktion selbst denken (wie bring ich dass zum laufen?), sondern auch wie ein Dritter den Dienst am besten angreifen könnte, wenn er den Source Code kennen würde
- sichere Passwörter für die Benutzer- UND administrative Accounts erzwingen
Wenn du diese Liste umsetzt, dann bist du deswegen nicht sicher. Es sind lediglich ein paar Tipps gegen die gröbsten Anfängerschnitzer.
Wie ice-breaker schon angedeutet hat, ist das Thema zu komplex - es gibt keine richtige Antwort darauf.