it-swarm.com.de

Direkten Zugriff auf eine Datei über http blockieren, PHP-Skriptzugriff jedoch zulassen

Ich lade meine Dateien (pdf, doc, flv usw.) in einen Puffer und versuche sie mit einem Skript für meine Benutzer. Ich brauche mein Skript, um auf die Datei zugreifen zu können, aber keinen direkten Zugriff darauf zuzulassen. Was ist der beste Weg, um dies zu erreichen? Soll ich etwas mit meinen Berechtigungen tun oder das Verzeichnis mit .htaccess sperren?

68
Brandon G

Am sichersten ist es, die gewünschten Dateien außerhalb des Web-Stammverzeichnisses zu speichern, wie Damien vorgeschlagen hat. Dies funktioniert, weil der Webserver lokalen Dateisystemberechtigungen folgt, nicht seinen eigenen.

Es gibt jedoch viele Hosting-Unternehmen, die Ihnen nur Zugriff auf das Web-Stammverzeichnis geben. Um dennoch HTTP-Anforderungen an die Dateien zu verhindern, legen Sie diese selbst in ein Verzeichnis mit einer .htaccess-Datei, die die gesamte Kommunikation blockiert. Zum Beispiel,

Order deny,allow
Deny from all

Ihr Webserver und somit Ihre serverseitige Sprache können sie weiterhin lesen, da die lokalen Berechtigungen des Verzeichnisses es dem Webserver ermöglichen, die Dateien zu lesen und auszuführen.

Prost.

88
Sam Bisbee

So habe ich den direkten Zugriff von URL auf meine Ini-Dateien verhindert. Fügen Sie den folgenden Code in der Datei .htaccess im Stammverzeichnis ein. (keine Notwendigkeit, zusätzlichen Ordner zu erstellen)

<Files ~ "\.ini$">
  Order allow,deny
  Deny from all
</Files>

meine settings.ini-Datei befindet sich im Stammverzeichnis und ohne diesen Code kann auf www.mydomain.com/settings.ini zugegriffen werden

32
Aamir Mahmood

in httpd.conf, um den Browser- und wget-Zugriff zu blockieren, um Dateien einzuschließen, z. Beachten Sie, dass Sie Dateitypen in der Direktive nicht verketten können, stattdessen mehrere Dateirichtlinien erstellen. 

<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

testen Sie Ihre Konfiguration, bevor Sie Apache neu starten

service httpd configtest

dann (anmutiger Neustart)

service httpd graceful
2
zzapper

Befinden sich die Dateien auf demselben Server wie das Skript PHP? Wenn dies der Fall ist, halten Sie die Dateien einfach aus dem Webstammverzeichnis und stellen Sie sicher, dass Ihr Skript PHP Leseberechtigungen für den Speicherort besitzt, an dem sie gespeichert sind.

2
Damien Wilson

Wenn Sie Zugriff auf Ihre httpd.conf-Datei haben (in ubuntu befindet sich diese im Verzeichnis/etc/Apache2), sollten Sie die gleichen Zeilen wie die .htaccess-Datei in dem entsprechenden Verzeichnis hinzufügen. Das ist (zum Beispiel):

ServerName YOURSERVERNAMEHERE
<Directory /var/www/>
AllowOverride None
order deny,allow
Options -Indexes FollowSymLinks
</Directory>

Tun Sie dies für jedes Verzeichnis, in dem Sie die Informationen kontrollieren möchten, und Sie haben eine Datei an einer Stelle, um den gesamten Zugriff zu verwalten. Im obigen Beispiel habe ich es für das Stammverzeichnis/var/www gemacht.

Diese Option ist bei ausgelagertem Hosting, insbesondere Shared Hosting, möglicherweise nicht verfügbar. Es ist jedoch eine bessere Option als das Hinzufügen vieler .htaccess-Dateien.

1
Sablefoste

Wie wäre es mit einem benutzerdefinierten .htaccess-Skript (wie in CodeIgniter verwendet)? Ich habe es versucht und es hat gut mit CodeIgniter-Apps funktioniert. Ideen für andere Apps?

<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>
0
Cosmo Arun

Um zu verhindern, dass .ini-Dateien den Webzugriff haben, geben Sie Folgendes in Apache2.conf ein

<Files ~ "\.ini$">
Order allow,deny
Deny from all
</Files>
0
Daniel Boakye