[SICHERHEIT] php-Code von User verhindern
LSpreee
- php
Hallo liebe Gemeinde (die mir schon so oft geholfen hat),
auf dem Weg zu einer sicheren Seite habe ich heute die Frage, wie man verhindern kann, dass User durch Formulare php-Code auf den Server kriegen, der dort ausgeführt werden kann.
Sagen wir mal die Datenbank (kein MySQL) liegt im public-Verzeichnis. Geht das überhaupt, oder brauche ich mir da keine Sorgen zu machen.
Falls die Frage blöd ist, bin ich sicher, dass ihr mir das auch sagen werdet ;)
Vielen Dank schonmal.
LSpreee
Hello,
PHP macht Dir da Kummer, wenn es
Die Exec-Funktionen sind ebenflls gefährlich, wenn man Usercode anfasst...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Vielen Dank für die Antwort!
- per HTTP direkterrecihbar ist (z.B. Bilder, die keine sind)
Meinst Du einen Dateiupload via Formular mit diesem enctype="multipart/form-data"?
Reicht es für diesen Fall aus, die Dateiendung zu kontrollieren?
- wenn das Hochgeladene per include() eingebunden wird
Sagen wir ich include eine meiner php-Dateien, welche die Daten aus der Datenbank per open_file(); (eigene Funktion) ausliest. Problematisch?
Viele Grüße in den Oberharz.
LSpreee
Reicht es für diesen Fall aus, die Dateiendung zu kontrollieren?
Nein - die Dateiendung hat in diesem Fall wenig Aussagekraft.
Es lohnt immer, mit diversen Techniken nochmal zu verifizieren, was man hat. Will man z.B. nur Bilder bestimmter Typen, sollte man das auch nochmal zusätzlich prüfen
welche die Daten aus der Datenbank per open_file(); (eigene Funktion) ausliest. Problematisch?
Solange die aus der Datenbank kommenden Strings nicht durch eval() gejagt werden ansich nicht.
Hello,
- per HTTP direkterrecihbar ist (z.B. Bilder, die keine sind)
Meinst Du einen Dateiupload via Formular mit diesem enctype="multipart/form-data"?Reicht es für diesen Fall aus, die Dateiendung zu kontrollieren?
Jein.
Das Problem ist dabei, dass Du nie ganz sicher sein kannst, welche Files beim Aufruf per HTTP vom PHP-Parser geparst werden, wenn Du den Server nicht selber betreust.
Diese Einstellungen liegen bei einem Hoster i.d.R. außerhalb deines Einflussbereiches.
Es ist also besser, das Parsen für das Ablageverzeichnis der Bilder AUSZUSCHALTEN
engine off
Dafür zu sorgen, dass die hochgeladenen Files tatsächlich Bilder sind
getimagesize()
und auf jeden Fall zu verhindern, dass eine .htaccess-Datei hochgeladen werden kann!
Es ist also auch nicht verkehrt, im Upload-Verzeichnis eine leere .htaccess-Datei zu plazieren, die für den Webserver und normale User schreibgeschützt ist.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Mahlzeit LSpreee,
- per HTTP direkterrecihbar ist (z.B. Bilder, die keine sind)
Meinst Du einen Dateiupload via Formular mit diesem enctype="multipart/form-data"?Reicht es für diesen Fall aus, die Dateiendung zu kontrollieren?
Für welchen Fall? Lass Dir bitte nicht alle Würmer einzeln aus der Nase ziehen, sondern beschreibe doch mal konkret, was Du hast und wovor Du Angst hast ...
Generell kann man allerdings sagen, dass es *IN KEINEM FALL* reicht, die Dateiendung zu kontrollieren - Namen sind Schall und Rauch.
- wenn das Hochgeladene per include() eingebunden wird
Sagen wir ich include eine meiner php-Dateien, welche die Daten aus der Datenbank per open_file(); (eigene Funktion) ausliest. Problematisch?
Woher sollen das Deine Leser wissen, wenn keiner von denen weiß, was die Funktion open_file() tut?
MfG,
EKKi
Mahlzeit LSpreee,
auf dem Weg zu einer sicheren Seite habe ich heute die Frage, wie man verhindern kann, dass User durch Formulare php-Code auf den Server kriegen, der dort ausgeführt werden kann.
Ganz einfach: führe einfach nichts aus (weder durch eval(), noch durch include() o.ä.), das vom Benutzer eingegeben bzw. hochgeladen werden kann. Punkt. Fertig.
Sagen wir mal die Datenbank (kein MySQL) liegt im public-Verzeichnis.
Von was für einer Datenbank sprichst bzw. schreibst Du?
MfG,
EKKi
Ganz einfach: führe einfach nichts aus (weder durch eval(), noch durch include() o.ä.), das vom Benutzer eingegeben bzw. hochgeladen werden kann. Punkt. Fertig.
Siehe anderen Post von mir (Nachfrage dazu).
Von was für einer Datenbank sprichst bzw. schreibst Du?
Datenbanken in Form von txt-Files.
Vielen Dank an Dich
Mahlzeit LSpreee,
Von was für einer Datenbank sprichst bzw. schreibst Du?
Datenbanken in Form von txt-Files.
Das sind keine Datenbanken.
Wo befinden sich diese .txt-Dateien? Innerhalb eines Verzeichnisses, das beliebig beschreibbar ist (durch irgendwelche Upload-Funktionen, ftp oder ähnliches)? Sind die Dateien nicht gegen Überschreiben geschützt? Beides solltest Du ändern.
Wenn Du diese .txt-Dateien einfach nur öffnest, um z.B. deren Inhalt auszulesen, dann sollte es keine Problem geben (wenn Du nicht so leichtsinnig bist, den Inhalt in irgendeiner Form mit eval() auszuführen). Wenn Du die Dateien hingegen mittels include() oder ähnlicher Methoden einbindest, wird evtl. enthaltener PHP-Code ausgeführt. Zusammen mit ggf. vorhandenen Sicherheitslücken (s.o.) ergäbe sich ein ziemliches Problem ...
MfG,
EKKi
Hello,
Von was für einer Datenbank sprichst bzw. schreibst Du?
Datenbanken in Form von txt-Files.Das sind keine Datenbanken.
Wie kommst Du denn darauf? Selbstverständlich kann eine strukturierte Text-File-Sammlung eine Datenbank darstellen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Von was für einer Datenbank sprichst bzw. schreibst Du?
Datenbanken in Form von txt-Files.
Das sind keine Datenbanken.
Wie kommst Du denn darauf? Selbstverständlich kann eine strukturierte Text-File-Sammlung eine Datenbank darstellen.
Na die Textfilesammlung allein nicht. Aber mit den implementierten Zugriffs und Schreibmethoden zusammen schon.
mfg Beat
Hello,
Von was für einer Datenbank sprichst bzw. schreibst Du?
Datenbanken in Form von txt-Files.
Das sind keine Datenbanken.
Wie kommst Du denn darauf? Selbstverständlich kann eine strukturierte Text-File-Sammlung eine Datenbank darstellen.Na die Textfilesammlung allein nicht. Aber mit den implementierten Zugriffs und Schreibmethoden zusammen schon.
Dann ist es ein Datenbank-Managementsystem.
Die Datenbank selber besteht nur aus den Daten, die i.d.R. zueinander in Beziehung stehen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg