Zugriff auf Bilder/Dateien außerhalb des DocumentRoot Verz.

Alles, was PHP betrifft, kann hier besprochen werden.

Zugriff auf Bilder/Dateien außerhalb des DocumentRoot Verz.

Postby Trutz » 22. September 2007 15:59

Hallo liebes Forum,

ich bin am verzweifeln... :( Ich versuche seit etwa zwei Monaten immer wieder folgendes Problem zu lösen:
Ich möchte per php und einem LogIn incl. Sessions eine BilderDatenbank für meine Freunde zur Verfügung stellen.

Das mit den Sessions und der MySQL abfrage funktioniert auch alles absolut perfekt. Das Problem, welches sich mir nun aber stellte, war die Sicherung der Bilder vor unberechtigten Zugriffen.

Per .htaccess ist das ganze auch nie ein Problem gewesen, auch das funzt. Allerdings ist das optisch nicht gerade der Bringer :wink:

Ich möchte also einen Zugang zu meinen Bildern per LogIn verschaffen.
Wenn ich das ganze nun so gestalte, dass ich die Bilder innerhalb des DocumentRoots ablege, können auch unbefugte darauf per Link zugreifen. Da das nicht sein sollte, könnte ich sie per .htaccess schützen... denkste! Das geht auch nicht. Ich bekomme nach erfolgreichem Login kein Bild zu sehen. Erst dann, wenn die Sperre per .htaccess wieder we ist, sehe ich die Bilder auf der Site.

Also lag es nahe, die Bilder außerhalb des DocumentRoots zu speichern und dann per php-Skript diese Bilder z.B. in einen String zu laden und dann im <Img>-Tag auszugeben.

Dies klappt aber auch wieder nicht, wenn die Daten außerhalb des DocRoot liegen.

Meine Frage ist nun, wie ich denn nun einen Festen Pfad des VServers für diese Skripte freigeben kann, ohne, dass jemand aus dem Internet direkten Zugriff darauf hat.

Versucht habe ich mich nun schon an diesen php-Prozeduren: fopen(), file_get_contents(), opendir(), und und und.
Aber nichts hat genützt.

Nun hoffe ich auf Hilfe von Euch und bitte euch um einen kleinen Hinweis, damit ich meinen Freund nicht noch weiter nerven muss. :oops:

Dem Apache muss man doch mit irgend einem Parameter sagen können, dass er solch ein Verzeichnis dafür freigeben soll, oder?

Vielen Dank schon einmal im voraus.

Beste Grüße
Trutz
Trutz
 
Posts: 4
Joined: 22. September 2007 15:40

Zugriff auf Bilder/Dateien außerhalb des DocumentRoot Verz.

Postby Trutz » 22. September 2007 21:16

Hi,

ich bins noch einmal.

Ich probiere gerade mit der <Directory>-Direktive herum, was dort so möglich ist.
Ich habe nun unterhalb des ersten <Directory>-Tags noch einen zweiten eingefügt. Ich bin mir aber nicht wirklich sicher, ob Apache den zweiten denn nicht vielleicht ignoriert. Kann mir das jemand beantworten?

Hier einmal die beiden Tags, wie sie in der httpd.conf stehen:

Code: Select all
# forbid access to the entire filesystem by default
<Directory />
    Options None
    AllowOverride AuthConfig
    Order deny,allow
    Deny from all
</Directory>

<Directory /AbsoluterPfadAußerhalbDesDocumentRoot/User>
    Allow from www.MeineDomain.net
</Directory>


Aber mit diesem Code habe ich immernoch keinen Zugang zu dem darin enthaltenen Bild.
Aufgerufen wird die Test8.php:
Code: Select all
<html>
<head>
<title>
</title>
</head>
<body>
<img src="Test8Bild.php" />
</body>
</html>


Und in der Test8Bild.php steht dann dies:
Code: Select all
<?php
header('Content-Type: image/jpeg');
   echo file_get_contents("/AbsoluterPfadAußerhalbDesDocumentRoot/User/Hajo_Tanja_Hochzeit.jpg");
?>



Vielleicht bin ich hier ja auch falsch und ich muss mich eigentlich in einem PHP-Forum melden... dann sagt mir bitte, dass ich hier falsch bin. :?

Ansonsten hoffe ich, dass sich jemand erweicht und mir bei meinem Problem noch hilft.
Ich werde trotzdem weiter probieren und meine Lösung hier posten, wenn ich denn eine habe. :) Aber ich bin von Natur aus Optimist... also nichts für Ungut :wink:

Vielen Dank noch einmal und viele Grüße
Trutz
Trutz
 
Posts: 4
Joined: 22. September 2007 15:40

müsste wahrscheinlich doch ins Apache Forum zurück

Postby Trutz » 23. September 2007 09:40

Hi,
mein Problem liegt glaube ich nicht darin, dass mein PHP-Code nicht funktioniert. Denn damit bekomme ich ja alles problemlos zum laufen, wenn ich Dateien innerhalb des DocumentRoots anspreche. :)

Das Problem liegt darin, den Apache so zu kofigurieren, dass ich auf Dateien außerhalb oder auch oberhalb des DocumentRoot zugreifen kann.

Auf dem vServer läuft ein Suse Linux. Ich hab auf meinem Rechner hier zu hause, auf dem ein Windows XP läuft, den Code auch laufen lassen... mit den selben Versionsnummern von Apache, php und MySQL... allerdings ist die Konfiguration auf dem Rechner hier zu hause keine Konfiguration für den Produktiveinsatz... sondern wirklich nur zum testen (will sagen, dass hier keine Sicherheit berücksichtige wurde :wink: )

Zu haus klappt also alles und auf dem Linux-vServer nicht... kann das vielleicht auch an den Berechtigungen der ausführenden php-Dateien liegen? oder an den selbigen der Bilder???

Grüße
Trutz
Trutz
 
Posts: 4
Joined: 22. September 2007 15:40

Die Lösung... naj, aber so ziemlich :wink:

Postby Trutz » 23. September 2007 19:20

So,

nach vielem weiter lesen und viel viel ausprobieren habe ich nun eine Lösung, die soweit wenigstens ein Ergebnis hat, mit dem ich soweit zufrieden sein kann: :)

Ich habe nun doch keinen Ordner außerhalb des DocumentRoot verwendet, weil ich es par tout nicht geschafft habe, solch einen Ordner per php-Skript anzusprechen. :shock:
Ich habe nun einen Ordner innerhalb des DocumentRoot verwendet und diesen per <Document>-Direktive in der httpd.conf für direkte Aufrufe aus dem Netz gesperrt. So kann nun keiner direkt auf die Dateien und Bilder und Videos zugreifen, die ich in dem Verzeichnis und den Unterverzeichnissen habe.
8)

Der Part der httpd.conf, den ich dafür brauchte, seht ihr ihr:
Code: Select all
<Directory /absoluter/Pfad/des/DocumentRoot/Bilder/*>
    Options None
    AllowOverride None
    Order Deny,Allow
    Deny from All
</Directory>


Hiermit ist nun das Bilderverzeichnis selbst noch nicht geschützt. So kann ich die php-Skripte, welche ich zum anzeigen der Bilder brauche, hier unterbringen. Alle Unterverzeichnisse hingegen sind nun für den Zugriff von außen dicht.

In dem Bilder-Verzeichnis habe ich nun diese beiden Dateien:
index.php und
create_image.php
Der Inhalt der index.php ist nun dieser:
Code: Select all
<html>
<title>
</title>
<body>
Hier soll ein Bild zu sehen sein. <br><br>
<img src="create_image.php" alt="Bilderbuch">
<br><br>
</body>
</html>


In der create_image.php steht dann dieses hier:
Code: Select all
<?php
$im = ImageCreateFromJPEG("Verschluss/Hajo_Tanja_Hochzeit.jpg");

Header("Content-type: image/jpeg");
ImageJPEG($im);
ImageDestroy($im);
?>


So wird per Skript also das Bild aus dem Verschlossenen Ordner als String in die Index.php eingefügt und als Bild interpretiert, da der String innerhalb des <img>-Tags steht.

Für alle, die immernoch nicht die Lösung haben, denen kann ich hier noch zwei Links geben, bei denen ich noch gesucht habe:
http://aktuell.de.selfhtml.org/artikel/server/aliasing/
http://www.rootforum.de/forum/

Die Moderatoren bitte ich, diesen post doch wieder in das Apache-Forum zu verschieben, da er hier nun wirklich besser aufgehoben ist. Aber auch im php-Forum werden wohl einige Leute nach diesem Thema suchen. Also viel Spaß beim nachbauen :wink:

Beste Grüße
Trutz
Trutz
 
Posts: 4
Joined: 22. September 2007 15:40

Postby tabstop » 10. January 2008 22:55

Hallo zusammen,

ich bin soeben über google auf euch gestoßen, da ich das selbe Problem habe.
Nur bei mir MUSS das Bild außerhalb des Document_Root Verzeichnisses sein.

Hat vielleicht schon jemand eine Lösung parat?
´
Danke

Gruß

tab
tabstop
 
Posts: 3
Joined: 10. January 2008 22:52

Postby Scory » 11. January 2008 13:08

Es gibt noch ein viel einfacheres Script, um Jpegs ausserhalb von DocumentRoot anzuzeigen.

1) Im HTML Dokument schreibst Du einen IMG-Tag, der nicht direkt auf das Bild verweist, sondern auf ein PHP-Script und den Bildernamen als Parameter mitgibt. Beispielsweise so:

Code: Select all
<img src="http://www.domain.de/showimg.php?image=bildchen.jpg">


Und im Script showimg.php steht nur folgendes drin:

Code: Select all
<?php
    $ordner = 'c:/hier/steht/dein/ordnername/der/Bilder';

    $bild = $ordner.'/'.$_GET['image'];   // das ergibt den kompletten Pfad zum Bild

    header('Content-type: image/jpeg');
    readfile($bild);
?>


Und fertig!
Scory
 


Return to PHP

Who is online

Users browsing this forum: No registered users and 24 guests