Zur Navigation

.htaccess produziert 403-Fehler

1 Kayleigh (Gast)

Hallo zusammen,

vergeblich versuche ich ein Verzeichnis vor Zugriff von außen zu schützen, dabei aber den Zugriff von localhost (der eigenen IP) zuzulassen.

Im Verzeichnis liegen ausschließlich .pdf-Dateien. (Kundenrechnungen)

in die .htaccess-Datei habe ich lediglich geschrieben:
order deny,allow
deny from all
allow from 123.123.123.123 #meine IP-Adresse

Greife ich nun aber intern, also von der IP der Domain aus auf ein .pdf-file zu, dann kriege ich einen 403-Fehler ausgeworfen.

Jemand eine Idee woran das liegen könnte?

Danke und Gruß,
Thomas

08.04.2018 01:34

2 Jörg Kruse

Wenn der Zugriff über die lokale Schnittstelle (das Loopback-Device) erfolgt, wird für gewöhnlich die Adresse 127.0.0.1 verwendet oder bei IPv6 die Adresse ::1

Order Deny,Allow
Deny from all
Allow from 127.0.0.1 ::1

localhost löst normalerweise auch auf 127.0.0.1 auf und nicht auf die öffentliche Adresse des Rechners

Ab Apache 2.4 wird übrigens die Require-Direktive verwendet:

Require all denied
Require ip 127.0.0.1 ::1

08.04.2018 09:52

3 Kayleigh (Gast)

Hallo und danke für die schnelle Antwort.

Tatsächlich habe ich beide Versionen getestet (es läuft Apache 2.4), aber leider hat es nicht geholfen... :-(

Man kann 'von außen' nicht auf die Datei zugreifen, aber eben auch nicht von der Domain aus selbst, bzw. auch nicht von localhost.

Kann mir das nicht erklären und stehe dem ziemlich ratlos vis-a-vis...

08.04.2018 17:30

4 Jörg Kruse

Hast du Zugriff auf die Logfiles? was steht denn zu den Zugriffszeiten im Access Log sowie im Error Log des Webservers?

aber eben auch nicht von der Domain aus selbst, bzw. auch nicht von localhost.

Das heißt nicht über http://localhost/verzeichnis?

Kannst du über http://127.0.0.1/verzeichnis zugreifen?

Und sobald du testweise "Require all denied" auskommentierst, kannst du normal zugreifen?

08.04.2018 18:02 | geändert: 08.04.2018 18:04

5 Kayleigh (Gast)

Im Error-Log steht z.B.:
[Sun Apr 08 19:20:54.041992 2018] [authz_core:error] [pid 8441] [client ***:54183] AH01630: client denied by server configuration: /***/rechnungen/123.pdf, referer: https://***/rechnungen.php?***

access.log sagt nichts Außergewöhnliches.

Wenn ich "Require all denied" auskommentiere,- dann ändert sich nichts, ich kann auch dann nicht darauf zugreifen, der 403-server error bleibt.

Die aufzurufende "Rechnung" liegt im selben Verzeichnis, also im Verzeichnis 'rechnungen'.

Der Aufruf erfolgt also über href='rechnungen/123.pdf'

[Edit Jörg: einige Daten durch *** ersetzt]

08.04.2018 19:48 | geändert von Jörg: 08.04.2018 21:01

6 Jörg Kruse

Der Zugriff erfolgte dann aber nicht über http://localhost/.../rechnungen/123.pdf und die IP-Adresse des Clients ist demzufolge auch nicht 127.0.0.1. Die IP-Adresse steht in der Fehlermeldung zwischen "client" und der Portangabe ":54183" sowie auch im Access-Log

Da ich nicht weiß, inwieweit auf die Seite zugegriffen werden darf, habe ich einige Daten in deinem Posting zur Sicherheit durch *** ersetzt.

08.04.2018 21:08 | geändert: 08.04.2018 21:10

7 Kayleigh (Gast)

Danke für die Sternchen... War mir beim Posten tatsächlich sehr unsicher.

Die IP-Adresse die da in den Logs angegeben wird,- ist die meines Routers!?
Die ändert sich ja bei jedem Neustart...

Logisch,- ich rufe die Datei ja auch von meinem PC aus auf.
Da hatte ich schon den ersten Gedankenfehler.

Dennoch weiß ich nicht wie genau der Pfad zur Datei auszusehen hat, etwa der ganze Pfad ab root?
Also http://localhost/home/User/public_html/rechnungen/123.pdf ?

08.04.2018 22:20

8 Jörg Kruse

Nur noch mal zur Klarstellung, nicht dass ich dich hier missverstanden habe:

vergeblich versuche ich ein Verzeichnis vor Zugriff von außen zu schützen, dabei aber den Zugriff von localhost (der eigenen IP) zuzulassen.

"localhost" legt nahe, dass dein Browser auf demselben Rechner läuft, auf dem auch das Rechnungsverzeichnis liegt. Ist das der Fall?

http://localhost/ weist auf das DocumtentRoot-Verzeichnis des Webservers auf deinem Rechner. Wenn das DocumentRoot-Verzeichnis der betreffenden Domain ganz woanders liegt, kannst du diese auch auf die lokale IP-Adresse 127.0.0.1 auflösen lassen, indem du einen entsprechenden Eintrag in der hosts Datei machst (unter Linux /etc/hosts):

127.0.0.1       example.com

... und dann den Browser neu startest. Danach stellt dein Browser die Anfragen bez. dieser Domain über die IP-Adresse 127.0.0.1

Das funktioniert aber wie gesagt nur, wenn die Rechnungen auf demselben Rechner liegen, von dem du aus auch mit dem Browser zugreifen möchtest.

09.04.2018 09:41 | geändert: 09.04.2018 09:43

9 Kayleigh (Gast)

Hallo Jörg,
hat etwas gedauert,- die Arbeit...
Ist aber immer noch aktuell.

OK, das Ganze sieht so aus:
Ich habe einen dedizierten Server. Auf diesem gibt es ein Kundenportal.
In dieses können sich Kunden einloggen und darin auch ihre Rechnungen per pdf-download abrufen.
Diese pdf's sollen aber per http://... nicht direkt im Browser aufgerufen werden können.
Also dachte ich das mit einer .htaccess-Datei zu lösen, sodass nur von 'localhost', also von diesem Kundenzugang aus, Zugriff auf die Dateien möglich sein soll, nicht aber per direktem Aufruf (Link mit httpd://...)

Grüße,
Thomas

11.04.2018 22:06

10 Jörg Kruse

Also dachte ich das mit einer .htaccess-Datei zu lösen, sodass nur von 'localhost', also von diesem Kundenzugang aus, Zugriff auf die Dateien möglich sein soll, nicht aber per direktem Aufruf (Link mit httpd://...)

Naja, ein Zugriff von localhost wäre in diesem Fall, wenn der Server selbst diese Datei abruft. Der Kunde hat ja weiterhin seine eigene IP-Adresse.

Einen abgesicherten Download könnte man dadurch realisieren, indem die PDF-Dateien in einem Verzeichnis gespeichert werden, von dem von außerhalb gar nicht zugegriffen werden kann. Stattdessen wird ein Download-Script verlinkt, welchem der Name des PDF als Parameter übergeben wird. Das Script prüft (z.B. anhand der Session), ob der User berechtigt ist, das PDF herunterzuladen, und liest es dann aus dem Verzeichnis ein, um es dem User zuzusenden. In PHP kann man so etwas z.B. mit der Funktion readfile() realisieren

Mit den Suchbegriffen "download script" lassen sich auch Beispiel-Scripte finden.

11.04.2018 22:48 | geändert: 11.04.2018 22:49

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]