2011-01-06 26 views
11

Ich habe eine PHP-Datei, die andere PHP-Dateien erbt (enthält). Alle geerbten Dateien befinden sich in einem Ordner namens "includes". Ich möchte direkten Zugriff auf diesen Ordner einschränken können. Nur PHP-Dateien auf dem Server können mit den Dateien im Ordner "includes" kommunizieren. Wie kann ich .htaccess verwenden, um dieses Ziel zu erreichen?.htaccess, um den Zugriff auf Ordner zu beschränken

FYI, ich den folgenden Code verwendet, und es hat nicht funktioniert

Order deny,allow 
deny from all 

Jede Hilfe

würde geschätzt
+0

Wenn dies nicht funktioniert, dass httpd.conf werden könnte, ist nicht festgelegt .htaccess-Dateien zu lesen. Zum Beispiel: AllowOverride None ändern, um etwas anderes (z AllowOverride All) und starten Sie den Web-Server. – user535673

Antwort

19

Wenn Sie nicht die Möglichkeit haben, die tatsächlich bewegt „enthält“ Ordner außerhalb des Bereichs Document Root, und mit Hilfe der include_path (dh Sie können nicht, um es von Web zu erhalten), und geben Sie

deny from all 

in einem .htaccess-Verzeichnis in diesem Verzeichnis.

Alternativ können Sie eine DEFINES-Direktive verwenden, um nur den Zugriff auf diese Include-Programme durch bestimmte autorisierte Dateien zuzulassen. Zum Beispiel setzen

<?php defined('ACCESS_ALLOWED') or die('Restricted Access'); ?> 

in der Spitze der Include-Dateien, und setzen dann

<?php define('ACCESS_ALLOWED', 1); ?> 

in den Programmen, die diese Dateien enthalten dürfen.

Dies wird verhindern, dass GETs, die diese Include-Dateien ausführen, von ihnen ausgeführt werden, und funktionieren für jeden Webserver, nicht nur für solche, die htaccess-Dateien unterstützen.

3

in Ihrem includes/.htaccess:

Order deny,allow 
deny from all 
+0

Versucht es, aber hat nicht funktioniert –

2

Sie können eigentlich nur Verwenden Sie einen index.php und übergeben Sie einen 404-Header mit header():

header('HTTP/1.1 404 Not Found', 404); 

IMO, das ist besser als ein 403, da es wie der Ordner nicht existiert. Wie für die Include-Dateien, setzen Sie diese Zeile über dem ersten include/require Linie der Hauptdatei:

define('INCLUDED', true); 

Und auf jede Datei im Verzeichnis enthalten, stellen diese oben größten Teil.

if (!defined(INCLUDED)) { 
    header('HTTP/1.1 404 Not Found', 404); 
} 
+2

Sie können auch exit() aufrufen; nach dem Header, wie die Seite noch ausgeführt werden kann. –

0

Je nach möglichen anderen Optionen auf einer höheren Ebene festgelegt Sie können verwenden müssen:

Satisfy all 
Order deny,allow 
Deny from all 

ich in diese lief, wenn das obere Verzeichnis Standardauthentifizierung einschließlich der Linie definiert:

Satisfy any 

Diese verhinderte, dass meine Ablehnung wirksam wurde, weil die Benutzer authentifiziert wurden.

1

Sie können den direkten Zugriff auf den Ordner unter Verwendung der folgenden Direktiven in htaccess oder auf dem Server verweigern.Config contex:

Mod-alias-basierte Lösung

Redirect 403 ^/folder/.+$ 

Dadurch werden alle Dateien und Verzeichnisse von/Ordner/bis 403 verboten Fehlerseite umleiten.

Mod-Rewrite-Basislösung:

RewriteEngine on 

RewriteRule ^/?folder/.+$ - [F] 
Verwandte Themen