Wie kann ich auf einer eigenen Website Dateien verstecken?

1 Antwort

Von Experte medmonk bestätigt

a) Spiele deine Bilder stattdessen über einen Handler aus. Bei einem Apache Webserver, der PHP interpretieren kann, könntest du bspw. ein PHP-Skript entwickeln, welches den HTTP_REFERER prüft oder schaut, ob eine zuvor gestartete Session existiert. Via URL Querystring überlieferst du den Bildnamen, der vom Skript aus dem Ordner gelesen werden soll. Das Ergebnis gibst du im Response zurück.

Den Ordner selbst kannst du vor Zugriff schützen. Entweder, indem du ihn außerhalb des Webroot platzierst oder via Konfiguration (bei einem Apache Webserver bspw. via htaccess-Datei).

b) Nur via Konfiguration (für Apache Webserver): Schau hier.


verreisterNutzer  08.10.2021, 23:55

Was schreibe ich denn in .htaccess rein, damit ich zum Beispiel 192.168.xx/pictures und die Dateien da drin nicht aufrufen kann, also dass diese quasi als "not found" angezeigt werden? Muss ich noch in einer anderen Datei etwas reinschreiben oder genügt es, die .htaccess-Datei in /var/www/html zu haben; Macht es nicht mehr Sinn, nur gewisse Dateien freizugeben? Und wie sicher ist das Ganze?

...Absolutes Neuland für mich.

0
regex9  09.10.2021, 01:27
@verreisterNutzer

In älteren Apache Versionen (vor 2.4) würde man diese Konfiguration (in der htaccess) setzen:

Order deny,allow
Deny from all

Wenn man Ausnahmen ergänzen wollte, könnte man diese noch in weiteren Zeilen anfügen.

Allow from allowed-domain.com

Ab Apache 2.4 wäre diese Konfiguration vorzuziehen:

Require all denied

Mit Ausnahmen:

Require host allowed-domain.com

Die htaccess-Datei wirkt auf den Ordner mitsamt seiner Unterverzeichnisse, in dem sie liegt. Wenn du in einem Unterordner eine andere htaccess-Datei mit anderer Konfiguration platzierst, überschreibt diese die Konfiguration der Datei aus dem Überordner.

Zusätzlich wäre es noch sinnvoll, generell (für den kompletten Root) das Verzeichnislistung zu deaktivieren.

Options -Indexes

Bei einem aktiven Status würde der Server, wenn ein Verzeichnis deiner Webseite aufgerufen wird, eine Übersicht der Dateien und Verzeichnisse zurückgeben, die im betreffenden Ordner verfügbar sind.

Macht es nicht mehr Sinn, nur gewisse Dateien freizugeben?

Es macht Sinn, nur die Dateien in das Rootverzeichnis zu laden, die relevant für die Webseite sind. Wenn sich darunter sensible Daten befinden, die du vor äußerem Direktzugriff schützen möchtest (klassisches Beispiel sind Nutzerdaten / Passwörter), solltest du diese nicht freigeben.

2
verreisterNutzer  10.10.2021, 23:04
@regex9

Muss ich .htaccess irgendwo aktivieren oder eintragen? Weil es macht sich keine Veränderung bemerkbar🤔

.htaccess habe ich bei /var/www/html drin, wo alles für die Seite(n) drin ist.

0
regex9  10.10.2021, 23:45
@verreisterNutzer

Vielleicht ist der Server so konfiguriert, dass htaccess-Dateien keine Berechtigungen haben, etwas zu überschreiben (siehe AllowOverride). Wenn du irgendetwas in die Datei schreibst (z.B. this is a test), deine Seite neu lädst und dann Fehler zurückbekommst / Fehler im Log geführt werden, kannst du davon ausgehen, dass die Datei erkannt wird.

1
verreisterNutzer  11.10.2021, 17:29
@regex9

Ich habe soweit alles ganz gut hinbekommen, jedoch geht das noch nicht mit den Ausnahmen...

Options -Indexes
Require all granted
#Require not host DOMAIN


#   Weiterleitung zu HTTPS
#RewriteEngine On
#RewriteCond %{SERVER_PORT} !=443
#RewriteRule ^(.*)$ https://??.ddns.net/$1 [L,R=301]

Alles, was auskommentiert ist, sorgt für einen Fehler. Vielleicht kannst du mir da auf die Sprünge helfen. Ich habe vor, die Seite nicht über DOMAIN erreichbar zu machen und wenn man die Seite nicht über HTTPS aufruft, dass man automatisch dahingeleitet (HTTPS) wird.

Ich danke dir aber schonmal bisher sehr :)

0
regex9  11.10.2021, 18:19
@verreisterNutzer

Setze die Require-Regel mal noch in Tags:

<RequireAll>
    Require all granted
    Require not host some-example.com
</RequireAll>

Dann dürfte es klappen.

Bezüglich des Redirects könntest du so vereinfachen:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://yourdomain.com/$1 [L,R=301]

oder den Serverport auf 80 prüfen.

RewriteCond %{SERVER_PORT} 80

In deinem Snippet sehe ich nun aber dennoch keinen Fehler. Es setzt lediglich voraus, dass ein SSL-Zertifikat auf dem Server installiert ist.

1
verreisterNutzer  11.10.2021, 18:49
@regex9

Ich habe es mal versucht, jedoch macht alles ab RewriteEngine On abwärts Probleme.

<RequireAll>
Require all denied
Require host ??.ddns.net
</RequireAll>

sowie

<RequireAll>
Require all granted
Require not host ??.ddns.net
</RequireAll>

führen dazu, dass der Aufruf der Website überall verboten ist🤔

Ist vielleicht in /etc/apache2/apache2.conf Folgendes schuld?:

<Directory /var/www/>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

Weil eigentlich wird das doch überschrieben...

0
verreisterNutzer  11.10.2021, 19:17
@regex9

Hmm, merkwürdig, ich belasse es erstmal bei:

Options -Indexes

<RequireAll>
Require all granted
Require not host ...
</RequireAll>

#Weiterleitung zu HTTPS
#ReqriteEngine On
#RewriteCond %{HTTPS} off
#RewriteRule ^(.*)$ ??.ddns.net/$1 [L,R=301]

Genau das ist der Inhalt von .htaccess.

Hauptsache die Dateien können nicht mehr gelistet werden... Ist ja nur lokal, aber danke dir!

0
regex9  11.10.2021, 20:06
@verreisterNutzer

Diesen Tippfehler: ReqriteEngine hast du aber jetzt erst in deinem letzten Kommentar gemacht? Da du zudem erwähnst, dass du einen lokalen Server betreibst, kann es noch sein, dass du das mod_rewrite-Modul nicht installiert hast (bei Hostingservices ist dieses Modul in der Regel bereits eingerichtet). Das kannst du entweder via phpinfo prüfen oder du baust eine Direktive in deine htaccess ein:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://yourdomain.com/$1 [L,R=301]
</IfModule>

Wenn du damit keinen Fehler mehr bekommst, ist das Modul nicht installiert.

1
verreisterNutzer  11.10.2021, 22:46
@regex9

Ja, der Teil funktioniert jetzt, danke! Wobei ich gar keine Veränderung sehe, weil der über die Domain automatisch https bevorzugt und Port 80 gar nicht frei geschaltet ist. Aber schaden tuts nicht.

Das mit dem Rewrite war hier nur bei gf vertippt gewesen.

0