Verweigern Sie den Zugriff auf einen bestimmten Ordner in .htaccess

130

Ich versuche, Benutzern den Zugriff auf den site/includesOrdner zu verweigern, indem ich die URL manipuliere.

Ich weiß nicht, ob ich alles ablehnen und einzelne Ausnahmen manuell vornehmen muss, um zuzulassen, ob ich nur diesen einen Ordner ablehnen kann oder ob es eine Umschreibfunktion gibt, die verwendet werden kann.

Spezifisches Beispiel: Ich möchte die Verzeichnisdateien nicht sehen, indem ich sie localhost/site/includesin die URL eingebe.

Snoob Dogg
quelle
1
Nur um das Auflisten von Verzeichnissen zu verbieten, schreiben Sie Options -Indexesin die .htaccess-Datei im Stammordner

Antworten:

205

Erstellen Sie eine site/includes/.htaccessDatei und fügen Sie diese Zeile hinzu:

Deny from all
Anubhava
quelle
5
Hallo!! anubhava Ich habe dies verwendet, um den direkten Zugriff auf meine API-Dateien im Ordner / api zu deaktivieren, aber jetzt senden alle Webservices den Status 403 verboten. Ich möchte nur den Zugriff blockieren, wenn jemand über den Browser darauf zugreift.
Ravisoni
9
Für einen Webserver gibt es keinen wirklichen Unterschied zwischen Anforderungen zwischen Browser und Nicht-Browser.
Anubhava
Ich benutze Nginx und kann nicht verwenden .htaccess. Also, wie kann ich das ohne machen .htaccess? danke
Shafizadeh
Wie kann ich auf die Dateien des Ordners / Unterordners zugreifen, wenn ich dies von allen ablehne? Die Dateien in Ordner / Unterordner geben 404 Fehler.
Vikas Khunteta
2
Deny from allgibt nicht 404, sondern 403. Sie können weiterhin mit PHP / Perl usw. auf Dateien / Ordner zugreifen, jedoch nicht über eine Webanforderung. Sie können eine neue Frage öffnen, wenn diese Ihre Anfrage nicht beantwortet hat.
Anubhava
52

Sie können den Zugriff auf einen Ordner auch mit verweigern RedirectMatch

Fügen Sie htaccess die folgende Zeile hinzu

RedirectMatch 403 ^/folder/?$

Dies gibt einen 403 forbiddenFehler für den Ordner zurück, dh: http://example.com/folder/Es blockiert jedoch nicht den Zugriff auf Dateien und Ordner in diesem Ordner. Wenn Sie alles im Ordner blockieren möchten, ändern Sie einfach das Regex-Muster in ^/folder/.*$.

Eine andere Option ist mod-rewrite Wenn url-rewrting-moduleaktiviert ist, können Sie Folgendes verwenden root/.htaccss:

RewriteEngine on

RewriteRule ^folder/?$ - [F,L]

Dies wird intern eine Anfrage für die Karte folderauf forbiddenFehlerseite.

Amit Verma
quelle
1
Mit Apache 2.22 ist die beste Lösung die erste: RedirectMatch .....
John
6
Viel lieber diese Antwort, als mehrere .htaccessDateien in jedem Verzeichnis zu erstellen, für das ich den Zugriff verweigern muss.
DanMad
40

In einer .htaccessDatei müssen Sie verwenden

Deny from  all

Geben Sie dies ein site/includes/.htaccess, um es spezifisch für das includesVerzeichnis zu machen

Wenn Sie nur eine Liste von Verzeichnisdateien nicht zulassen möchten, können Sie diese verwenden

Options -Indexes 
Andy
quelle
2
Ist das rekursiv?
Abdillah
@Abdillah Ja, das ist es
Oliver M Grech
18

Wir werden das Verzeichnis als sehr sicher festlegen und den Zugriff für alle Dateitypen verweigern. Unten finden Sie den Code, den Sie in die .htaccess-Datei einfügen möchten.

Order Allow,Deny 
Deny from all 

Da wir jetzt die Sicherheit festgelegt haben, möchten wir jetzt den Zugriff auf die gewünschten Dateitypen ermöglichen. Fügen Sie dazu den folgenden Code zur .htaccess-Datei unter dem soeben eingefügten Sicherheitscode hinzu.

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

Ihre endgültige .htaccessDatei wird so aussehen

Order Allow,Deny 
Deny from all 

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

Quelle von Zugriff auf bestimmte Dateitypen in einem geschützten Verzeichnis zulassen

Arthankamal
quelle
Diese Antwort ersparte mir viele Kopfschmerzen. Klappt wunderbar.
Ich versuche es so sehr, aber ich weine stärker
9

Sie können eine .htaccess-Datei für den Ordner erstellen, mit der der Zugriff verweigert werden soll

Deny from  all

oder Sie können zu einer benutzerdefinierten 404-Seite umleiten

Redirect /includes/ 404.html
Marvin
quelle
6

Legen Sie einfach .htaccess in den Ordner, den Sie einschränken möchten

## no access to this folder

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order Allow,Deny
    Deny from all
</IfModule>

Quelle: MantisBT- Quellen.

Der Pate
quelle
4

Sie können dies auch IndexIgnore * in Ihre Root-Datei .htaccess einfügen, um die Dateiliste aller Ihrer Website-Verzeichnisse einschließlich des Unterverzeichnisses zu deaktivieren

Ravisoni
quelle
6
Dadurch wird die Dateiliste nicht deaktiviert, der Autoindexer wird jedoch angewiesen, beim Erstellen des Index alle Dateien zu ignorieren. Zum Deaktivieren der Dateiliste würden Sie verwenden Options -Indexes.
Vladimir Kornea
3

Das Erstellen von index.php, index.html, index.htm ist nicht sicher. Denn jeder kann innerhalb des angegebenen Verzeichnisses auf Ihre Dateien zugreifen, indem er den Dateinamen errät. Beispiel: http://yoursite.com/includes/file.dat Daher wird empfohlen, eine .htaccess-Datei zu erstellen, um alle Besucher abzulehnen;). Habe Spaß !!

Meraj
quelle
2

Sie können dies dynamisch folgendermaßen tun:

mkdir($dirname);
@touch($dirname . "/.htaccess");
  $f = fopen($dirname . "/.htaccess", "w");
  fwrite($f, "deny from all");
fclose($f);
RatajS
quelle
0

Aus einigen Gründen, die ich nicht verstanden habe, funktionierte das Erstellen des Ordners / .htaccess und das Hinzufügen von Verweigern von allen für mich nicht. Ich weiß nicht warum, es schien einfach, aber es hat nicht funktioniert. Stattdessen hat das Hinzufügen von RedirectMatch 403 ^ / folder /.*$ zum Root-htaccess funktioniert.

Chimdi
quelle