• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

Zugriffsrechte setzen in vhost

Azurel

Member
Ich habe zwei Domains. domainA und domainB auf dem selben Server. domainA ist eine Sammeldomain zum ablegen und verwaltenvon Daten, die jedoch nicht direkt über diese domainA aufgerufen werden dürfen.

Ich möchte aber von domainB per PHP und readfile(http://domainA/dolder/file) von domainA Daten lesen können.

Dafür habe ich diesen Eintrag in vhost für domainA gemacht und schon alles ausprobeirt was mir in den Sinn kam:

<DirectoryMatch "^/var/www/vhosts/domainA/httpdocs/folder/">
Order deny,allow
Deny from all
Allow from 127
Allow from server-ipv4
Allow from server-ipv6/128
Allow from ::1/128
</DirectoryMatch>

Jedoch erhalte ich bei domainB für readfile() immer nur ein Error:
readfile(http://domainA/folder/file.png): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden

Sieht hier jemand meinen Fehler? Wie kann ich den Direktaufruf für domainA sperren, aber domainB darauf Zugriff gestatten?
 
Hallo!

Steht da wirklich Allow from 127 so drin? 127.0.0.1 hätte ich verstanden.

mfG
Thorsten
 
Ich hatte da auch zuerst 127.0.0.1 stehen. Aber wie marce schon erwähnt, macht das eigentlich keinen Unterschied.
 
Apache 2.2
Code:
    <Directory "/var/www/vhosts/domainA/httpdocs/folder">
        Options None +FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Deny from all
        Allow from localhost
        Allow from 127
    </Directory>

Apache 2.4
Code:
    <Directory "/var/www/vhosts/domainA/httpdocs/folder">
        Options None +FollowSymLinks
        AllowOverride None
        <RequireAny>
            Require host localhost
            Require ip 127
        </RequireAny>
    </Directory>

Statt readfile lieber http://php.net/manual/en/function.fsockopen.php oder noch besser http://php.net/manual/en/function.stream-socket-client.php verwenden.


Was für Module hat Dein Apache denn noch so geladen die dazwischenfunken könnten? "Firewall" am Werk? Was sagen die Logs?
 
Das ist ein Plesk 11.5 Server mit Apache/2.2.15 und zusätzlich nginx mit dran. Kann das daran liegen?

Wenn ich die Domain so aufrufe, dann habe ich
# curl --head http://www.domainB.com
HTTP/1.1 200 OK
Server: nginx

Ich habe dein
<Directory "/var/www/vhosts/domainA/httpdocs/folder">
Options None +FollowSymLinks
AllowOverride None
Order Deny,Allow
Deny from all
Allow from localhost
Allow from 127
</Directory>
gesetzt und den Pfad angepasst. Die Datei ist per Browser nicht mehr erreichbar, aber auch nicht von domainB mit readfile().

Bezüglich deiner php-Funktionen muss ich das später mal schauen. Noch nie verwendet. :)
 
Da wirst Du die nginx-Config entsprechend anpassen und die IP-Adresse des nginx mit der er sich zum Apache verbindet in der obigen Apache-Config zusätzlich zulassen müssen.

CORS und Co sowie X-Forwarded-for sind bei Deiner Variante auch noch zu beachten. Von geplanten künftigen Stolpersteinen zu Gunsten der Sicherheit im Netz mal ganz abgesehen...


Alternativ würde ich darüber nachdenken direkt per Filesystem auf das File zuzugreifen, statt über INET-Sockets Ping-Pong zu spielen (deutlich schneller und erheblich sicherer).
 
Back
Top