Ankündigung

Einklappen
Keine Ankündigung bisher.

Dateizugriffe nur per PHP-Skript erlauben (durch .htaccess und MySQL-UserDB)

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateizugriffe nur per PHP-Skript erlauben (durch .htaccess und MySQL-UserDB)

    Hallo Verehrte,

    nachdem ich nun doch mal auf eine Problematik gestoßen bin, die mir weder durch Google noch durch Forensuche beantwortet werden konnte, habe ich mich dazu entschlossen doch mal dieses Forum hier zu benutzen (auch wenn ich Gefahr laufe, einen Thread eröffnet zu haben, der bereits existiert, ich ihn aber nur nicht gefunden habe).

    Es geht um Folgendes:
    Ich programmiere gerade eine Webseite, auf der unter anderem auch Bilder hochgeladen werden können, die aber nur von den registrierten Benutzern betrachtet werden dürfen (sofern in der Datenbank nicht angegeben ist, dass das Bild auch öffentlich zugänglich gemacht werden soll).

    Die Informationen aus der Datenbank abzuschotten ist kein Problem (sicherer geht es immer, jepp), aber ich bekomme es nicht hin, dass ich die Bilddateien, die als Dateien auf dem Webserver liegen, nur für die PHP-Skripte zugänglich gemacht werden.

    Probiert habe ich folgendes (was ich soweit auch im Netz als Ideen gefunden habe): .htaccess erstellt und anhand allow from [IP-Adresse] bzw. [localhost] versucht den Zugriff zu beschränken. Außerdem habe ich auch nachgesehen, was es mit den FTP-Zugriffsrechten auf sich hat. Nichts gebracht...entweder die Bilder waren frei zugänglich oder für alle gesperrt (also auch für die PHP-Skripte).

    Überlegt habe ich mir, dass man die Bilddateien mit einer "Fantasie-Dateiendung" hochladen könnte, bspw. bild.bild, und auf den entsprechenden Ordner den Zugriff auf Dateien ala *.bild sperrt. Nun im PHP-Skript die Bilddateien lädt und im Browser als bild.png ausgibt. Aber da stehe ich wieder vor dem Problem: Wie soll das gehen, wenn ich entsprechend dieser Idee keinen Zugriff auf die *.bild-Dateien bekomme.

    Also...hier nochmal konkret aufgeführt:
    - Bilder sind in der MySQL-DB hinterlegt (id,date,publicaccess[ja/nein])
    - Wenn publicaccess == 0 (bzw. nein), dann sollen die Bilder gesperrt sein für den direkten Zugriff über die Adresszeile (bspw. domain.de/bilder/bild.png) - denkbar wäre für mich hierbei auch, einfach zwei Ordner anzulegen, einen für den geschlossenen und einen für den öffentlichen Bereich (je nach Integer im Feld publicaccess werden die Bilder also hin und her verschoben)
    - die Bilder sollen aber, sofern sie von einem PHP-Skript aufgerufen werden, innerhalb dieses Skriptes eingebunden werden (die Prüfung der gestatteten bzw. nicht gestatteten Einbindung würde das PHP-Skript übernehmen)

    Alternative wäre, wie gesagt, die Bilder als eine Nicht-Bild-Datei-Endungs-Datei abzulegen und über das PHP-Skript temporär (also während des Aufrufs) im Skript als *.png Datei zu generieren...

    Ich bin gespannt, was folgt...schoin Gruß
    http://www.schwarzerton.de.


  • #2
    Oder um es einfach zu machen: Wie kann ich grundsätzlich den Aufruf von Bilddateien oder anderen nur über ein PHP-Skript gestattet (losgelöst von der Realisierung und Konzeption des MySQL-gestützem Rechtesystems)...?
    http://www.schwarzerton.de.

    Kommentar


    • #3
      Bilddaten außerhalb des Docroots halten oder ein verzeichniss web-technisch per Deny from all verriegeln.
      Die Bilder selbst dann per PHP-Script "Streamen", man kann sich da eine rewrite-rule bauen, die es erlaubt ( whitelisted ) images entsprechend auszugeben.

      Bedenke dabei das du
      a) MIME-Header zum Content-Type vorher senden musst, die zum Bild passen.
      b) Das Bild memory-gerecht streamen und nicht einfach per file_put_contents an den browser "patscht".

      fopen, fread / fgets

      - http://www.webmaster-toolkit.com/mime-types.shtml
      - http://www.webmaster-toolkit.com/mod...enerator.shtml
      :
      long long ago; /* in a galaxy far far away */
      evangelizr - Ich hab dir weitergeholfen ? beschenk mich!

      Kommentar

      Lädt...
      X