Ich kann jedem an Sicherheit interessierten nur das Buch "PHP-Sicherheit" - nun in der 3. Auflage erhältlich ist - empfehlen. Durch die Lektüre dieses Buches kann man bereits überdurchschnittliche Kenntnisse im Bereich Sicherheit von PHP erwerben. Allerdings habe ich in dem Buch keine Lösung für folgendes Standard-Sicherheitsproblem gefunden:
Man will Dateien nur innerhalb eines geschützten Bereiches zum Download anbieten. Jemand, der sich nicht eingeloggt hat und dessen Überprüfung nicht erfolgreich war, soll diese Dateien nicht herunterladen dürfen.
Die klassische, bis beschämende Sicherheitslücke ist dann da, wenn ein "Angreifer", der die URLs dieser zum Download angeboten Dateien kennt, diese durch direkte Eingabe der URL in seinem Browser, herunter laden kann. Also wenn man direkt per URL,-Angabe im Browser sämtliche Sicherheitsmaßnahmen umgehen kann.
Wie verhindert man nun so eine Sicherheitslücke?
Die erste Maßnahme besteht darin, dass man für das Herunterladen nicht direkt die URLs der Dateien angibt, sondern den Download der Dateien über eine Download.php-Datei umleitet:
Header("Content-type: application/octet-stream");
Header("Content-Disposition: attachment; filename=theNameYouWant.ext");
readfile("theSourceFileHere.ext");
In der "Hauptdatei" fügt man diese Codezeile ein:
"<"a href="http://www.download.php">download"<"/a>
Obiges Beispiel funktioniert zwar nur zum Herunterladen der einen Datei mit dem Namen theSourceFileHere.ext, aber wohl jeder Programmierer kann dieses Beispiel problemlos "aufbohren".
Ideal und wünschenswert ist nun, wenn man die zum Herunterladen angebotenen Dateien so in der Dateistruktur des Servers versteckt, dass man von außen nicht direkt auf diese Dateien zugreifen kann...
Anmerken möchte ich noch, dass so eine Sicherheitslücke bei Verwendung eines auf dem MVC-Prinzip basierenden Frameworks (meines Erachtens) nicht entstehen kann. Warum? (Bei richtiger Programmierung) filtert der Controller alle gefährlichen bzw. ungewünschten Eingaben aus...


als erstes











