PHP Sicherheit, was ist alles zu beachten

Physically

Lt. Commander
Registriert
Nov. 2010
Beiträge
1.708
Hallo,

da ich mich seit einiger Zeit mit PHP beschäftige und auch schon mein erstes funktionsfähiges Login/Registrations-Formular gescriptet habe (auf SQL-Basis), möchte ich nun die Sicherheit einbauen. Ich habe schon einiges gelesen, wie z.B. das Cross Site Scripting (XSS), oder SQL Injection, aber das war's auch schon. Nun, das kann ja nicht alles sein, deshalb frage ich einfach mal ganz abstrakt:

Welche Themen sind ein Muss für die sichere Programmierung in PHP/MySQL?

Danke Euch Leute!


Wünsche Euch einen guten Abend.
 
gute frage, da ich da auch grad ein wenig am werkeln bin...

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..

dann fand ich diese seite recht interessant, auch mit session generierung und der korrekten vernichtung derer: http://www.tutorials.de/content/499-php-mysql-login-system-mit-sessions.html, wobei man dabei dann "ini_set('session.use_only_cookies', 1);" zu beginn ausführen sollte, damit die session-info nicht direkt in der adresszeile steht, sondern nur in nem cookie gespeichert wird..


ansonsten bin ich auch auf andere antworten gespannt, und natürlich auch zu verbesserungen zu dem kram den ich hier gepostet hab ;)
 
OWASP Common Attacks

Es gibt soviel in Richtung Sicherheit zu beachten, dass ich nichmal wüsste wie man das relativ klein zusammenfassen könnte, im Endeffekt würde dabei wohl ein Buch stehen...
Alleine Password Management ist ja schon eine Sache über die man ewig viel schreiben kann.
 
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.
 
Danke für Eure Antworten. Also klar, die Sicherheit sollte direkt beim Coding berücksichtigt werden. Ich mache mir da nur ein kleines System [...].

Sessions zu benutzen macht natürlich auch Sinn, und ist meine erste Wahl.

@lucky37: Diese Tipps, sind mir bereits bekannt und ich auch dabei mich mit ihnen zu beschäftigen. Sicher ist halt immer relativ.
 
@luky: okay das mit den sessions habe ich bisher nur in sehr vielen beiträgen und büchern gelesen, daher bin ich da mal von ausgegangen, dass dies so die gängigste praxis ist...

wie würdest du denn eine "sichere" variablenübergabe in php ohne sessions realiseren?
 
Zuletzt bearbeitet:
Ich hatte irgendwann vor Jahren mal einen Workshop zu so einem Thema vorbereitet - mal sehen, ob ich meine Folien noch dazu finde.
 
Bevor ich's vergesse: Hast du eventuell so einen Zend Certification Study Guide? Da sind ziemlich viele interessante Aspekte drin aufgeführt. Nicht nur speziell für PHP, sondern auch allgemeiner Natur. Ich denke, wenn man ein gutes Verständnis für die Sicherheit hat, dann kann man das auch auf PHP und andere Sprachen gut ummünzen.

Schau mal hier:
http://downloads.zend.com/framework/generic/ZFC_Study_Guide_v1.pdf

Das ist zwar noch nicht die ausführliche Version, die ich irgendwann mal erstellt habe - aber schon ein erster, guter Überblick. Sollte dir sicher helfen! Ab Seite 188 sollte es interessant werden.
 
Zurück
Oben