Sicherheit in PHP bei Schreibrechten?
Ferdinand
- recht
0 Cheatah
Hallo,
mit einer Programm update.php verändere ich auf einer
domain www.meinedomain.de verschiedene HTML-Dateien
datei_1.html...datei_n.html.
D.h. ich schnappe mir den kompletten Quelltext einer
HTML-Datei, nehme mit update.php die Quelltext-Änderung
vor und schreibe die Datei wieder zurück. Das funktioniert
auch prima.
Nun meine Frage: um in die HTML-Dateien zu schreiben brauche
ich für alle Schreibrechte. Kann ich da ein Sicherheitsproblem
bekommen, wenn ich auf www.meinedomain.de alle HTML-Dateien
mit Schreibrechten lasse? Oder kommt sowieso niemand von aussen
mit vernünftigem Aufwand dran?
Soll ich die Rechte mit PHP nach dem Speichern wieder auf
NUR-Lesen zurücksetzen? Was meint Ihr?
Danke für Eure Meinung
Viele Grüsse
Ferdinand
Hi,
Nun meine Frage: um in die HTML-Dateien zu schreiben brauche
ich für alle Schreibrechte.
nein, nur für den User, unter dem die Working-Prozesse des Servers laufen.
Kann ich da ein Sicherheitsproblem
bekommen, wenn ich auf www.meinedomain.de alle HTML-Dateien
mit Schreibrechten lasse? Oder kommt sowieso niemand von aussen
mit vernünftigem Aufwand dran?
Definiere "mit vernünftigem Aufwand". Letzten Endes wird jemand, der an die Dateien (also nicht an die Ressourcen - für den HTTP-Server gibt es dann eh keinen Unterschied zwischen den Leuten) rankommt, vermutlich mindestens als Du auftreten, sprich: Wenn Du Schreibrechte hast, hat sie ein Hacker auch.
Soll ich die Rechte mit PHP nach dem Speichern wieder auf
NUR-Lesen zurücksetzen? Was meint Ihr?
Nutzfrei. Was dieses eine Script kann, kann ein anderes auch; und die Gefahr besteht (besonders bei PHP - beispielsweise ist für PHP-Nuke ein solches Leck bekannt) am ehesten, dass PHP-Code von außen eingeschleust und in der selben Umgebung, nämlich dem Server ausgeführt wird.
Worüber Du Dir bei schreibenden Dateizugriffen viel mehr Sorgen machen solltest ist die Tatsache, dass eine Vielzahl von Zugriffen gleichzeitig geschehen können, wodurch schon durch _normale_ und legitime Nutzung Datenverluste drohen.
Cheatah
Guten Abend,
Hallo,
Worüber Du Dir bei schreibenden Dateizugriffen viel mehr Sorgen machen solltest ist die Tatsache, dass eine Vielzahl von Zugriffen gleichzeitig geschehen können, wodurch schon durch _normale_ und legitime Nutzung Datenverluste drohen.
Wenn Die Datei als ganzes übertragen wird (vom tmp-Verzeichnis ins Ablage-Verzeichnis) dann kann durch "eine Vielzahl von Zugriffen" überhaupt nichts passieren, es sei denn, die Maschine und/oder ihr OS haben ne Macke. Die Plattenzugriffe werden nämlich auf Biosebene serialisiert, auch wenn sie vermeintlich gleichzeitig stattfinden. Wer zuerst kommt, mahlt zuerst - alte Müllerregel. Trotz Multitasking und Multithreading wird beim Bedienen der Festplatte immer erst ein Thread zuende bedient. Das kannst Du testen, indem Du einfach mal ein 100MByte File generierst und überträgst. Allerdings "am Stück". In der Zwischenzeit müssen alle anderen Diskorientierten Prozesse warten.
Wenn Du Dein eigenes Script allerdings mehrfach aufrufst, dann behält dasjenige Recht, dass den Copy-Vorgang zuletzt ausgelöst hat.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
Wenn Die Datei als ganzes übertragen wird (vom tmp-Verzeichnis ins Ablage-Verzeichnis) dann kann durch "eine Vielzahl von Zugriffen" überhaupt nichts passieren, es sei denn, die Maschine und/oder ihr OS haben ne Macke.
hm? Es geht um Schreibzugriffe auf Serverseite - und die meisten HTTP-Server haben absolut nichts dagegen, wenn sie mehrfach gleichzeitig kontaktiert werden. In dem Fall würde die Datei mehrfach gleichzeitig beschrieben werden, und das hat fast immer Datenverluste zur Folge.
Die Plattenzugriffe werden nämlich auf Biosebene serialisiert, auch wenn sie vermeintlich gleichzeitig stattfinden. Wer zuerst kommt, mahlt zuerst - alte Müllerregel.
Richtig. Dennoch wird die Datei auch vom zweiten Prozess schreibend geöffnet - sofern man nichts dagegen unternimmt - und einer der beiden Prozesse fällt dann letzten Endes unter den Tisch. Besonders kritisch ist das Szenario: P1 liest => P1 öffnet schreibend => P2 liest => P1 schließt => P2 öffnet schreibend => P2 schließt, denn in dem Fall liest P2 eine _leere_ Datei aus und schreibt sie anschließend zurück.
Cheatah