Ich lade meine Dateien (pdf, doc, flv usw.) in einen Puffer und stelle sie meinen Benutzern mit einem Skript zur Verfügung. Ich benötige 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? Sollte ich etwas mit meinen Berechtigungen tun oder das Verzeichnis mit .htaccess sperren?
php
apache
permissions
Brandon G.
quelle
quelle
Antworten:
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 Berechtigungen.
Es gibt jedoch viele Hosting-Unternehmen, die Ihnen nur Zugriff auf das Webstammverzeichnis gewähren. Um weiterhin HTTP-Anforderungen an die Dateien zu verhindern, legen Sie sie mit einer .htaccess-Datei, die die gesamte Kommunikation blockiert, in einem eigenen Verzeichnis ab. Zum Beispiel,
Order deny,allow Deny from all
Ihr Webserver und damit Ihre serverseitige Sprache können sie weiterhin lesen, da der Webserver aufgrund der lokalen Berechtigungen des Verzeichnisses die Dateien lesen und ausführen kann.
quelle
Allow from 127.0.0.1
, kann Ihr Server, einschließlich aller serverseitigen Codes, auf Dateien in diesem Verzeichnis zugreifen. Weitere Dokumentation zu diesen Bits finden Sie unter httpd.apache.org/docs/2.4/mod/mod_access_compat.html#allowAuf diese Weise habe ich den direkten Zugriff von URL auf meine INI-Dateien verhindert. Fügen Sie den folgenden Code in die
.htaccess
Datei im Stammverzeichnis ein. (kein zusätzlicher Ordner erforderlich)<Files ~ "\.ini$"> Order allow,deny Deny from all </Files>
Meine
settings.ini
Datei befindet sich im Stammverzeichnis und ist ohne diesen Code unter www.mydomain.com/settings.ini zugänglichquelle
in httpd.conf, um den Browser- und Wget-Zugriff zu blockieren, um Dateien einzuschließen, insbesondere db.inc oder config.inc. Beachten Sie, dass Sie Dateitypen in der Direktive nicht verketten können, sondern mehrere Dateirichtlinien erstellen.
<Files ~ "\.inc$"> Order allow,deny Deny from all </Files>
um Ihre Konfiguration vor dem Neustart von Apache zu testen
dann (würdevoller Neustart)
quelle
Befinden sich die Dateien auf demselben Server wie das PHP-Skript? Wenn ja, halten Sie die Dateien einfach aus dem Webstamm heraus und stellen Sie sicher, dass Ihr PHP-Skript Leseberechtigungen für jeden Speicherort hat.
quelle
Wenn Sie Zugriff auf Ihre httpd.conf-Datei haben (in Ubuntu befindet sie sich im Verzeichnis / etc / apache2), sollten Sie die gleichen Zeilen wie in der
.htaccess
Datei im jeweiligen Verzeichnis hinzufügen . Das heißt (zum Beispiel):ServerName YOURSERVERNAMEHERE <Directory /var/www/> AllowOverride None order deny,allow Options -Indexes FollowSymLinks </Directory>
Führen Sie dies für jedes Verzeichnis aus, in dem Sie die Informationen steuern möchten, und Sie haben eine Datei an einem Ort, um den gesamten Zugriff zu verwalten. Im obigen Beispiel habe ich es für das Stammverzeichnis / var / www gemacht.
Diese Option ist möglicherweise nicht für ausgelagertes Hosting verfügbar, insbesondere für Shared Hosting. Es ist jedoch eine bessere Option als das Hinzufügen vieler
.htaccess
Dateien.quelle
Um zu verhindern, dass INI-Dateien auf das Web zugreifen, fügen Sie Folgendes in apache2.conf ein
<Files ~ "\.ini$"> Order allow,deny Deny from all </Files>
quelle
Wie wäre es mit einem benutzerdefinierten modulbasierten .htaccess-Skript (wie es in CodeIgniter verwendet wird)? Ich habe es versucht und es hat in CodeIgniter-Apps gut funktioniert. Irgendwelche Ideen, um es auf anderen Apps zu verwenden?
<IfModule authz_core_module> Require all denied </IfModule> <IfModule !authz_core_module> Deny from all </IfModule>
quelle