Hallo und guten Morgen,
Vorhaben: ich hab vor ein kleines PHP-Framework zu kreieren. Da dies mein erstes unterfangen ist, würde ich gerne wissen wo sicharheitslücken existieren.
Lies die OWASP Top 10 - hier das PDF in deutscher Sprache für die Situation ab 2013.
Frage: Wie stelle ich sicher das mein Framework gut gesichret ist?
Wie der Name "Top 10" andeutet, hast du es mit MINDESTENS 10 Themengebieten zu tun, die alle ihrerseits komplex sind, deshalb also keine simple Antwort erlauben:
A1: Injection
A2: Fehler in Authentifizierung und Session-Management
A3: Cross-Site Scripting (XSS)
A4: Unsichere direkte Objektreferenzen
A5: Sicherheitsrelevante Fehlkonfiguration
A6: Verlust der Vertraulichkeit sensibler Daten
A7: Fehlerhafte Autorisierung auf Anwendungsebene
A8: Cross-Site Request Forgery (CSRF)
A9: Nutzung von Komponenten mit bekannten Schwachstellen
A10: Ungeprüfte Um- und Weiterleitungen
Manche Punkte treffen für PHP weniger zu, bzw. sind nur in bestimmten Kontexten relevant. Aber nach Punkt 10 ist die Liste der möglichen Schwachstellen halt noch nicht zu Ende.
Deine Frage, so wie gestellt, KANN man NICHT beantworten.
zur Info: Ich hab sporadische Kenntnisse der IT-Sicherheit
Nimm nur mal den Punkt A3 XSS heraus: Welches Problem existiert hier?
echo "<a href='next.php?page=$page'>weiter</a>";
Also genauer gesagt: Das Problem ist offensichtlich, es fehlt an Absicherung gegen XSS - aber wie genau muss die aussehen?
Ich finde das Thema immer wieder sehr interessant, auch weil ich selber schon viele Fehler gemacht habe im Laufe der Jahre :-O
Deshalb möchte ich einige Punkte anhängen:
- Das Framework kann selber "sicher" sein, wenn das Umfeld der damit erstellten Applikation nicht passt, ist der Schaden vorprogrammiert
- Man benötigt speziell bei PHP eine sichere Trennung zu anderen Anwendungen durch wohlüberlegte Einrichtung der Server auf dem Host. Da PHP oft als Modulversion des Webservers läuft, stecken hier bereits die ersten Lücken versteckt.
- Sinnvolle Überwachung ist viel wert! Zugeteilte Rechte, z. B. für Datenbankuser, sollten immer so gering wie möglich gehalten werden. Außerdem nützt es nichts, die DB-User z.B: mit fail2ban zu überwachen, wenn die Applikation (bei den üblichen Zugriffskontrollen mittels Datenbank) selber keine Überwachtung von Fehlversuchen vornimmt. Diese "User" laufen ja meistens unter demselben DB-User...
Es kommt also immer darauf an, wie man seine Applikationen mit dem Framework erstellt. Das Framework kann noch so "sicher" sein, wenn der Programmierer nicth nachdenkt, was er damit anstellt, ist die vermeintliche Sicherheit dahin.
Typische Fehler stecken in Uploadscripten, unverschlüsselter Kommunikation, grabbable Links (z.B. so ähnlich, wie Sven ihn schon für XSS gezeigt hat, mit erratbaren oder sogar ordinalen Werten), nicht überwachten Anmeldeverfahren ("Logins"), usw..
Grüße
TS