Joshua: Sicherheit auf Servern in Verbdg. mit PHP

Hallo zusammen,

ich habe einige Fragen zu Thema Serversicherheit und würde mich über Eure Erfahrungsberichte und Tipps freuen.

Ich habe ein grösseres Projekt in PHP, dass auch einige "sensiblere" Daten beinhaltet wie Benutzerdaten in einer Datenbank und DB- und Seitenpasswörter und -einstellungen in Config-Dateien.

Wie kann ich diese Daten bestmöglichst schützen? Meine Strategie bisher: Config-Dateien kommen in ein spezielles Verzeichnis gespeichert,welches mit .htaccess geschützt wird. Diese Dateien werden dann includet.
Dieses Verfahren scheint mir relativ sicher zu sein.

Problematischer: Meine Skripte greifen auf einige Verzeichnisse schreibend zu, z.B. in ein Verzeichnis BILDER, in dem dann neue Bilddateien vom Skript angelegt werden. Auf dem Server musste ich dazu CHMOD auf 777 stellen. Das PHP Skript wird weder als "owner", noch als "group" akzeptiert, also musste ich auf "all" setzen.

Meine Befürchtung: damit ist doch dritten prinzipiell ermöglicht, in diesem VZ zu schreiben?! Ein Dritter könnte evtl ein Skript dort zum Ausführen bringen und sensible Daten auslesen.

Testweise habe ich von einem anderen Server mittels "fopen" auf einige Dateien zugegriffen - dies wurde zwar aufgrund der Servereinstellungen meines Hosters verhindert, ABER: ein Profi findet vielleicht einen anderen Weg, zudem könnten ja kurzzeitig einmal die Servereinstellungen ausfallen.

Wisst Ihr vielleicht einen Workaround?

Ich habe mir schon mal überlegt, generell keine Schreibrechte zu vergeben und dann nur wenn sie benötigt werden _kurzzeitig_ vom eigenen Skript einzuschalten. Ist das eine gute Lösung?

Grüsse
Joshua

  1. Tag!

    Was darfst Du auf dem Server tun? Ist es Deiner oder hast Dur nur Webspace mit einer Uploadmöglichkeit?

    Generell läuft PHP mit den Rechten des Webservers (bei der Modul version - bei CGI weis ich das nicht) - also müstest Du Den Webserver User zum Besitzer Deines Verzeichnis "Bilder" machen... Jedoch dabei aufpassen, dass Du Dich nicht selber aussperst.

    Das läuft dann also in etwa auf folgendes Hinaus:
    chown <webserverUser>:<GruppeDeinesBenutzers> Bilder
    chmod 770 Bilder

    Der Webserver und PHP können damit dann alles tun.
    Alle aus der Gruppe in der auch Dein FTP_User stecken ebenfalls - Demnach sollte er eine Gruppe für sich allein haben...

    Das kann man aber nur mit den nötigen Rechten.

    Weiterhin kann PHP auch Dateien lesen, die vom Webserver nicht im Internet veröffentlicht werden. Sprich Wenn Du kannst, dann lege alle Dateien außerhalb von DocumentRoot an.

    1. Guten Tag(Abend) auch!

      Was darfst Du auf dem Server tun? Ist es Deiner oder hast Dur nur Webspace mit einer Uploadmöglichkeit?

      Letzteres

      Generell läuft PHP mit den Rechten des Webservers (bei der Modul version - bei CGI weis ich das nicht) - also müstest Du Den Webserver User zum Besitzer Deines Verzeichnis "Bilder" machen... Jedoch dabei aufpassen, dass Du Dich nicht selber aussperst.

      Momentaner Zustand: Überall wo mein Skript etwas schreiben möchte, muss ich beim VZ bei den Rechten bei "all" das schreiben aktivieren. Hätte es am liebsten so, dass das PHPSkript als Benutzer erkannt wird (und _nicht_ als "all") und damit Dritte keinerlei Zugriffsmöglichkeiten haben.

      Das kann man aber nur mit den nötigen Rechten.

      ... die ich anscheinend nicht habe :-(

      Weiterhin kann PHP auch Dateien lesen, die vom Webserver nicht im Internet veröffentlicht werden. Sprich Wenn Du kannst, dann lege alle Dateien außerhalb von DocumentRoot an.

      Guter Tipp, ist zwar für dieses Projekt nicht möglich, aber für andere. Dann muss man ja den direkten internen Server-Pfad angeben?

      Danke
      Joshua

      1. Hallo Joshua

        Nur mal so 'ne kleine Frage: Steckt da Absicht hinter, dass du das Thema in "ZU DIESEM FORUM" geändert hast?

        Gruß

        Johannes

        --
        ss:| zu:) ls:[ fo:) de:] va:) ch:? sh:( n4:& rl:( br:< js:| ie:{ fl:( mo:}
        1. Hi Johannes

          Nur mal so 'ne kleine Frage: Steckt da Absicht hinter, dass du das Thema in "ZU DIESEM FORUM" geändert hast?

          Ne überhaupt nicht, dass kam automatisch, da jemand bei seiner Antwort offensichtlich auf "FORUM" gewechselt hat (aus Versehen?) ...

          Bin etwas enttäuscht, dachte da entwickelt sich ne richtige Diskussion... ist doch ein interesanntes und wichtiges Thema

          Grüsse
          Joshua

          1. ne, das war ja mein Fehler ... sorry!

  2. Hallo,
    ich bin selbst Webhoster und habe bis jetzt keine schlechten Erfahrungen mit PHP und Sicherheit. Aber es ist definitiv so das die Sicherheit einer PHP Anwendung stark von der Realisierung abhängig ist.

    Ich habe ein grösseres Projekt in PHP, dass auch einige "sensiblere" Daten beinhaltet wie Benutzerdaten in einer Datenbank und DB- und Seitenpasswörter und -einstellungen in Config-Dateien.

    Datenbanken und Dateien lassen sich durch die vergabe von entsprechenden Berechtigungen sichern. Es ist aber schwer Dir da pauschal was zu empfehlen da es sehr vom kongreten Fall abhängig ist.

    Wie kann ich diese Daten bestmöglichst schützen? Meine Strategie bisher: Config-Dateien kommen in ein spezielles Verzeichnis gespeichert,welches mit .htaccess geschützt wird. Diese Dateien werden dann includet.
    Dieses Verfahren scheint mir relativ sicher zu sein.

    Du hast es bereits richtig erkannt das verfahren scheint sicher. Der schein trügt etwas die sicherheit ist abhängig von der Serverkonfiguration. Wie hast Du eigentlich das mit dem Include gelöst? Wenn Dein Script von anderer stelle darauf zugreifen kann können das auch andere.

    Problematischer: Meine Skripte greifen auf einige Verzeichnisse schreibend zu, z.B. in ein Verzeichnis BILDER, in dem dann neue Bilddateien vom Skript angelegt werden. Auf dem Server musste ich dazu CHMOD auf 777 stellen. Das PHP Skript wird weder als "owner", noch als "group" akzeptiert, also musste ich auf "all" setzen.

    Deine PHP Scripte werden mit den Benutzerrechten das Apache oder mit einer Berechtigung die in der php.conf festgelegt wurde. Also auch mit den dort angegebenem User:Gruppe. Darauf mußt Du deine Dateiberechtigung einstellen. Offen lassen ist relativ gefährlich.

    Meine Befürchtung: damit ist doch dritten prinzipiell ermöglicht, in diesem VZ zu schreiben?! Ein Dritter könnte evtl ein Skript dort zum Ausführen bringen und sensible Daten auslesen.

    Deine Befürchtung ist richtig.

    Testweise habe ich von einem anderen Server mittels "fopen" auf einige Dateien zugegriffen - dies wurde zwar aufgrund der Servereinstellungen meines Hosters verhindert, ABER: ein Profi findet vielleicht einen anderen Weg, zudem könnten ja kurzzeitig einmal die Servereinstellungen ausfallen.

    Es ist nicht nötig Deinen Server über den Web-Server anzugreifen der dieses Verzeichnis schützt. Was aber andere Dienste nicht tun z.B. FTP TELNET oder was da sonst noch läuft.

    Wisst Ihr vielleicht einen Workaround?

    Ich habe mir schon mal überlegt, generell keine Schreibrechte zu vergeben und dann nur wenn sie benötigt werden _kurzzeitig_ vom eigenen Skript einzuschalten. Ist das eine gute Lösung?

    Das macht die Sache nicht sicherer da Du deinem Script ja mitteilen mußt wann es das schreiben zulassen muß. Diesen mechanismus kann man auch für Angriffe nutzen.

    Viele Gruesse aus Bad Aibling (Bayern naehe Muenchen)
    Alexander

    1. Hi Alexander

      Datenbanken und Dateien lassen sich durch die vergabe von entsprechenden Berechtigungen sichern. Es ist aber schwer Dir da pauschal was zu empfehlen da es sehr vom kongreten Fall abhängig ist.

      Ausser chmod kenne ich da leider nix... Hast Du einen weiteren Tipp zur Sicherung von DBs? zur Info: ich bin bei einem externen "normalen" Hoster

      Du hast es bereits richtig erkannt das verfahren scheint sicher. Der schein trügt etwas die sicherheit ist abhängig von der Serverkonfiguration. Wie hast Du eigentlich das mit dem Include gelöst? Wenn Dein Script von anderer stelle darauf zugreifen kann können das auch andere.

      Bei meinem Hoster(und dessen Einstellungen) ist das so:
      ich kann in meinem PHP Skript eine Datei includen, die in einem VZ liegt, welches .htaccess geschützt ist(dabei muss ich nicht mal PW angeben). Versucht man, die entsprechende include Datei im Browser aufzurufen, kommt allerdings (richtigerweise) eine Passwortabfrage. Siehst Du hier ein Sicherheitsprob, da ich sie ohne Probleme includen konnte?

      Deine PHP Scripte werden mit den Benutzerrechten das Apache oder mit einer Berechtigung die in der php.conf festgelegt wurde. Also auch mit den dort angegebenem User:Gruppe. Darauf mußt Du deine Dateiberechtigung einstellen. Offen lassen ist relativ gefährlich.

      Wie gesagt, mein Skript wir nur als "all" erkannt (=schwächste Gruppe). Dies scheint aber Standard bei den Hostern zu sein. Gibt es eine Möglichkeit, dass irgendwie zu beieinflussen?

      Es ist nicht nötig Deinen Server über den Web-Server anzugreifen der dieses Verzeichnis schützt. Was aber andere Dienste nicht tun z.B. FTP TELNET oder was da sonst noch läuft.

      Was meinstDu genau mit "nicht nötig"?

      Danke
      Joshua

      1. Hi Joshua,

        Ausser chmod kenne ich da leider nix... Hast Du einen weiteren Tipp zur Sicherung von DBs? zur Info: ich bin bei einem externen "normalen" Hoster.

        Es gibt noch die möglichkeiten über User und Gruppe, setzt aber voraus das Du eigene User und Gruppen anlegen kannst was bei einem externen Provider vermutlich nicht geht. Auserdem halt das Berechtigungssystem innerhalb der Datenbank mit dem Du zugriffe Einschränken kannst.

        Bei meinem Hoster(und dessen Einstellungen) ist das so:
        ich kann in meinem PHP Skript eine Datei includen, die in einem VZ liegt, welches .htaccess geschützt ist(dabei muss ich nicht mal PW angeben). Versucht man, die entsprechende include Datei im Browser aufzurufen, kommt allerdings (richtigerweise) eine Passwortabfrage. Siehst Du hier ein Sicherheitsprob, da ich sie ohne Probleme includen konnte?

        Ja, die .htaccess geschützten VZ sind in der Vergangenheit schon öffters erfolgreich angegriffen worden. Das liegt meistens an Softwarefehlern. Deshalb ist immer ein Schutz der wichtigen Daten mit rechten des Filesystems sicherer als mit Anwendungen. Die .htaccess Dateien werden nur vom apache beachtet deshalb konntest Du von PHP auch darauf ohne Passwort zugreifen.

        Wie gesagt, mein Skript wir nur als "all" erkannt (=schwächste Gruppe). Dies scheint aber Standard bei den Hostern zu sein. Gibt es eine Möglichkeit, dass irgendwie zu beieinflussen?

        Ich kann es mir zwar nur schwer vorstellen aber wenn Dein Provider das so sagt - könnte er vielleicht recht haben. Bei mir ist das so ich Verwende das mod_php vom apache und der führt alles mit seiner Berechtigung aus. Aber vermutlich erlaubt Dir dein Provider nicht Deine Scripte auf die apache Berechtigung einzustellen.

        Es ist nicht nötig Deinen Server über den Web-Server anzugreifen der dieses Verzeichnis schützt. Was aber andere Dienste nicht tun z.B. FTP TELNET oder was da sonst noch läuft.
        Was meinstDu genau mit "nicht nötig"?

        Diese .htaccess Passwort Abfrage wird nur vom Apache geprüft wenn ich jetzt durch irgend ein Softwareproblem in PHP FTP oder Telnet oder alles was da noch läuft zugang zum System bekomme und Du eine Berechtigung auf all stellst reicht mir ein Gast Zugang oder auch ein unprivilegierter von einem laufendem Prozess um Deine Datei zu lesen.

        Viele Grüße
        Alexander