PHP: dateien zwischenlagern ein Sicheitsrisiko und aufwändig?
-
Hallo,
wir haben hier einen Win2003 Server IIS mit PHP 5.1 am laufen (A).
Daneben gibt es eine andere Kiste mit einem Tomcat drauf (B).B macht nichts anderes als PDF-Dokumete auf Anfrage zur Verfügung zu stellen.
In der Art "HTTP:\\x.x.x.x\123445.ABCDE.pdf" können diese dort aufgerufen werden.Nun ist so das wir über Server A den Kunden angebunden haben, da B in einem vom Kunden nicht erreichbaren Netz steht, das aber für A erreichbar ist.
Nun hatten wir einen externen Entwickler angeheuert der in PHP auf A die sozusagen umgeleiteten PDFs in eine Weboberfläche auf A integrieren sollte, inklusive Download-Link.Der hat uns jedoch irgendwas erzählt, von wegen das sei nicht so einfach mit PHP auf Windows-Dateisystem und da gäbe es Sicherheitsrisiken und blabla.
Jedenfalls wollte es aufeinmal mehr Stunden als die vereinbarten 2 Stunden haben.Das kam mir komisch vor. Ich hab mich dann mit meinen sehr rudimentären Kenntnissen von PHP hingesetzt und mich mir Hilfe von PHP.net in < 1 Stunde eine einfache Lösung hingebastelt(bis auf die PDF-Dardstellung und den Download-Link gab es die Oberfläche schon).
Das tut wie folgt:
Kunde fragt in seinem Browser eine DocID an, das PHP-Skript schaut in einen lokalen PDF zwischenspeicherpfad ob die PDF-Datei mit der DocID dortdrin liegt,
falls nein wird das PDF mit der PHP-Funktionen "copy" von B auf A in diesen Zwischenspeicherpfad reinkopiert.
copy('HTTP:\\x.x.x.x\'.DocID.'.ABCDE.pdf', '.\\PDF_temp\\'.DocID.'.ABCDE.pdf');
Dann wird einem <input> Submit-Button einfach im "onClick" eine Javescript "window.open('.\PDF_temp\'.$DocID.'.ABCDE.pdf')" aufgerufen.Fertig, funktioniert. Wo ist da jetzt der große Aufwand, wo das Sicherheitsproblem? Was ich nur sehe ist: der Kunde könnte theoretisch beliebige Dokumente aus dem PDF_temp abrufen, aber das darf er sowieso.
Für PDF_temp -Pfad schreibe ich noch ein kleines Script das alles löscht was länger als eine Woche nicht angefasst wurde (einen Abruf wird eh schon in einer Datenbank erfasst).Will uns der PHP-Fuzzi übern Tisch ziehen, ist er unfähig oder übersehe ich was?
-
Er könnte alle Dokumente, die auf dem Webserver x.x.x.x erreichbar sind, einsehen (z.B. durch $DocID = '../../irgendwas.cfg').
-
Naja, für den Fall könnte man aber einen kurzen Check einbauen, der prüft, ob die DocID gültig ist und, ob der zusammengebastelte Pfad gleich dem Temp-Pfad ist, oder so ähnlich.
-
Natürlich, jede Sicherheitslücke ließe sich schließen! Ich wollte nur aufzeigen, dass es - so wie das System oben beschrieben ist - eben doch nicht ganz so unbedenklich ist
-
warum keinen reverse proxy konfigurieren, der vorher eine auth durchführt - das sollte ein guter admin recht schnell hinbekommen (und es braucht keinen php code
-
Deine Methode ist bezüglich Performance gut, da ein einmaliger Kontakt zwischen B & A die PDFdaten bereit stellt.
Hier sollte man sich überlegen, ob diese Daten dann von allen Kunden einsehbar sind.Um die Sicherheit zu gewährleisten ist es wichtig, das B den kopiervorgang durchführt. Dabei stelle A an B einen Request, der die Bereitstellung der PDF-Datei anfragt.
Um hierbei wirklich Sicherzugehen, könnte eine Konfigurations-datei bestimmte PDF-Dateien auffassen, die von A angefordert werden dürfen.Eine Weitere Möglichkeit wäre, die PDF-Dateien immer auf A zu lokalisieren. B Überprüft Sequenziell(automatisch z.B. alle 24 Stunden), ob sich die PDF-Dateien verändert(Größe,Inhalt,..etc) haben, wodurch ein Update von B auf A erfolgt.
Somit hat A keine Möglichkeiten über B ungewollten Informationen anzufragen.
-
Also,
inzwischen gibt es noch einen Mustercheck - rein numerisch - für die DocID.
Ansonsten hab ich so gelassen.
danke.