Christoph: TXT vor Zugriff schützen, wenn aber PHP schreiben muss.

Hi,

ich habe eine Malingliste und jeder User kann sich online eintragen.
Alles wird dann in einer TXT gespeichert.

Nur könnte jeder, wenn er den Pfad weiss, die Textdatei aufrufen und anschauen.

Wie kann ich dies verhindern.
Wenn PHP aber die Datei lesen und schreiben muss, kann ich dies schlecht mit den Lese und Schreibrechte lösen!

mfg chris

  1. Hallo Christoph,

    Wie kann ich dies verhindern.

    Du musst dem Webserver mitteilen, dass er die Datei nicht ausliefern soll. Dazu hast Du zwei Möglichkeiten:

    1. Die Datei wird außerhalb des Webstammbaums abgelegt. Dann gibt es keine Möglichkeit, über HTTP darauf zuzugreifen.

    2. Die Datei wird mittels Konfigurationsmethoden des Webservers (beim Apache z.B. .htaccess) für den Zugriff über HTTP gesperrt.

    Wenn PHP aber die Datei lesen und schreiben muss, kann ich dies schlecht mit den Lese und Schreibrechte lösen!

    Genau.

    Viele Grüße,
    Christian

    1. Hallo,

      1. Die Datei wird außerhalb des Webstammbaums abgelegt. Dann gibt es keine Möglichkeit, über HTTP darauf zuzugreifen.

      2. Die Datei wird mittels Konfigurationsmethoden des Webservers (beim Apache z.B. .htaccess) für den Zugriff über HTTP gesperrt.

      Da hab ich ein Verständnisproblem:
      eine solchermaßen gesperrte Datei kann ich auch auf meiner eigenen Seite nicht mehr anzeigen. Oder doch?
      Anders rum gefragt:
      Ich würde gern eine .txt Datei vor Manipulation durch direkten Zugriff über die URL sperren, sie aber weiterhin per PHP auslesen und auf meiner Seite anzeigen.
      Geht das? Wie?
      Oder kann man eine .txt Datei per HTTP Zugriff gar nicht manipulieren? Die bloße Anzeige würde _mich_ gar nicht stören.

      Bitte um Nachsicht, wenn meine Frage von geringem Grundlagenwissen zeugt.

      Gruß Fritz

      --
      ss:( zu:| ls:# fo:| de:/ va:) ch:? sh:( n4:? rl:? br:$ js:| ie:| fl:| mo:)
      1. Moin!

        Oder kann man eine .txt Datei per HTTP Zugriff gar nicht manipulieren?

        Nein, wie soll das gehen? Üblicherweise verweigert der Webserver die HTTP-Methode PUT, die genau das (Abspeichern einer Datei im Webspace) ermöglichen würde. Webzugriff ist in der Regel "read-only".

        Die bloße Anzeige würde _mich_ gar nicht stören.

        Aber deine Benutzer. Weil das eine klasse Möglichkeit ist, dass ein Spammer sich gültige Mailadressen ziehen kann. TU DAS BITTE NICHT!

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Hallo,

          Die bloße Anzeige würde _mich_ gar nicht stören.

          Aber deine Benutzer. Weil das eine klasse Möglichkeit ist, dass ein Spammer sich gültige Mailadressen ziehen kann. TU DAS BITTE NICHT!

          ich hab in meinem posting leider nicht erwähnt, dass es sich bei _meiner_ .txt um eine art chatboard handelt. Da sind keine Mailadressen drin.

          Gruß Fritz

          --
          ss:( zu:| ls:# fo:| de:/ va:) ch:? sh:( n4:? rl:? br:$ js:| ie:| fl:| mo:)
        1. Die Datei wird außerhalb des Webstammbaums abgelegt. Dann gibt es keine Möglichkeit, über HTTP darauf zuzugreifen.

        2. Die Datei wird mittels Konfigurationsmethoden des Webservers (beim Apache z.B. .htaccess) für den Zugriff über HTTP gesperrt.

        Da hab ich ein Verständnisproblem:
        eine solchermaßen gesperrte Datei kann ich auch auf meiner eigenen Seite nicht mehr anzeigen. Oder doch?

        PHP benutzt nicht den Webserver, um eine Datei zu lesen, sondern ganz normale Funktionen des Betriebssystems. Somit ist PHP auch unabhängig von Beschränkungen des Webservers.

        Gruß,
          soenk.e

  2. ich habe eine Malingliste und jeder User kann sich online eintragen.
    Alles wird dann in einer TXT gespeichert.

    Nur könnte jeder, wenn er den Pfad weiss, die Textdatei aufrufen und anschauen.

    Wie kann ich dies verhindern.

    Lege die Datei oberhalb Deines Webverzeichnisses ab (PHP: $_SERVER["DOCUMENT_ROOT"]."/../adressen.txt"). Auf diesen Ort ("Wurzel" oder "webroot") hat man per Webserver bzw. URL keinen Zugriff.
    Falls Du beim Login per FTP als erstes den Namen des Verzeichnisses siehst, in dem sich Deine Webseiten befinden (meistens "htdocs", "public_html" oder "www"), funktioniert dieser Weg. Andernfalls hast Du mit allerhöchster Wahrscheinlichkeit keinen Zugriff auf Verzeichnisse oberhalb des Webverzeichnisses.

    Zweite Möglichkeit wäre das Sperren der URL zur Adressdatei. Beim Apache benutzt Du dazu etwas wie

    <files "adressen.txt">
      Deny from all
      </files>

    in der jeweiligen .htaccess des Verzeichnisses (siehe auch Apache-Anleitung -> "Runtime Configuration Directives" -> "<files>" und "deny"). Benutzt Du einen anderen Webserver, befrage bitte die Anleitung.

    Wobei mir noch eine dritte Möglichkeit einfällt: Standardmäßig sind beim Apache alle Dateien, die mit .ht beginnen, mittels <files> gesperrt (um Zugriffe auf .htaccess und ähnliches von Beginn an zu verhindern). Du könntest Deine Adressendatei also eigentlich auch einfach ".htadressen" nennen.

    Gruß,
      soenk.e