Odmów dostępu do jednego określonego folderu w .htaccess


136

Próbuję odmówić użytkownikom dostępu do site/includesfolderu, manipulując adresem URL.

Nie wiem, czy muszę odmawiać wszystkiemu i ręcznie tworzyć indywidualne wyjątki, aby zezwolić, czy mogę po prostu odrzucić ten jeden folder lub czy istnieje funkcja przepisywania, której można użyć.

Konkretny przykład: Nie chcę wyświetlać plików katalogów po wpisaniu localhost/site/includesadresu URL.


1
tylko po to, aby nie Options -Indexes

Odpowiedzi:


215

Utwórz site/includes/.htaccessplik i dodaj tę linię:

Deny from all

5
Hej!! anubhava Użyłem tego, aby wyłączyć bezpośredni dostęp do moich plików api w folderze / api, ale teraz wszystkie wywołania usługi sieciowej wysyłają 403 status zabroniony. Chcę tylko zablokować dostęp, gdy ktoś ma do nich dostęp z przeglądarki.
ravisoni

9
W przypadku serwera WWW nie ma rzeczywistej różnicy między żądaniami między przeglądarką a żądaniami spoza przeglądarki.
anubhava

Używam nginx i nie mogę używać .htaccess. więc jak mogę to zrobić bez .htaccess? dzięki
Shafizadeh

Jak mogę uzyskać dostęp do plików folderu / podfolderu, jeśli odmówię wszystkim? Pliki do folderu / podfolderu powodują błąd 404.
Vikas Khunteta,

2
Deny from allnie poda 404, ale 403. Nadal możesz uzyskać dostęp do plików / folderów za pomocą PHP / Perl itp., ale nie używając żądania internetowego. Możesz otworzyć nowe pytanie, jeśli nie zawiera ono odpowiedzi na Twoje zapytanie.
anubhava,

55

Możesz również odmówić dostępu do folderu za pomocą RedirectMatch

Dodaj następujący wiersz do htaccess

RedirectMatch 403 ^/folder/?$

Spowoduje to zwrócenie 403 forbiddenbłędu dla folderu, tj .: http://example.com/folder/ale blokuje dostęp do plików i folderów w tym folderze, jeśli chcesz zablokować wszystko w folderze, po prostu zmień wzorzec wyrażenia regularnego na ^/folder/.*$.

Inną opcją jest mod-rewrite Jeśli url-rewrting-modulejest włączona, możesz użyć czegoś podobnego do następującego w root/.htaccss:

RewriteEngine on

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

To będzie wewnętrznie mapować żądania za folderdo forbiddenstrony błędu.


1
W przypadku Apache 2.22 najlepszym rozwiązaniem jest pierwsze: RedirectMatch .....
John

6
O wiele bardziej wolę tę odpowiedź niż tworzenie wielu .htaccessplików w każdym katalogu, do którego muszę odmówić dostępu.
DanMad

40

W .htaccesspliku, którego musisz użyć

Deny from  all

Umieść to, site/includes/.htaccessaby było określone dla includeskatalogu

Jeśli chcesz tylko zablokować wyświetlanie plików katalogów, możesz użyć

Options -Indexes 

2
Czy to jest rekurencyjne?
Abdillah

@Abdillah Yes it is
Oliver M Grech

19

Ustawimy katalog tak, aby był bardzo bezpieczny, odmawiając dostępu dla wszystkich typów plików. Poniżej znajduje się kod, który chcesz wstawić do pliku .htaccess.

Order Allow,Deny 
Deny from all 

Ponieważ ustawiliśmy teraz zabezpieczenia, chcemy teraz umożliwić dostęp do naszych żądanych typów plików. Aby to zrobić, dodaj poniższy kod do pliku .htaccess pod kodem bezpieczeństwa, który właśnie wstawiłeś.

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

Twój ostateczny .htaccessplik będzie wyglądał

Order Allow,Deny 
Deny from all 

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

Źródło z Zezwól na dostęp do określonych typów plików w chronionym katalogu


Ta odpowiedź uratowała mi wiele bólu głowy. Działa jak marzenie.
Bardzo się staram, ale płaczę mocniej

9

Możesz utworzyć plik .htaccess dla folderu, który powinien był odmówić dostępu za pomocą

Deny from  all

lub możesz przekierować do niestandardowej strony 404

Redirect /includes/ 404.html

6

Po prostu umieść .htaccess w folderze, który chcesz ograniczyć

## 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>

Źródło: źródła MantisBT .


4

Możesz również umieścić to IndexIgnore * w swoim głównym pliku .htaccess, aby wyłączyć listę plików wszystkich katalogów witryny, w tym podkatalogu


6
Nie wyłącza to wyświetlania plików, ale nakazuje automatycznemu indeksowaniu ignorowanie wszystkich plików podczas konstruowania indeksu. Aby wyłączyć listę plików, użyjesz Options -Indexes.
Vladimir Kornea,

3

Tworzenie index.php, index.html, index.htm nie jest bezpieczne. Ponieważ każdy może uzyskać dostęp do twoich plików w określonym katalogu, zgadując nazwę pliku. Np .: http://yoursite.com/includes/file.dat Tak więc zalecaną metodą jest utworzenie pliku .htaccess w celu odmowy dostępu wszystkim odwiedzającym;). Baw się dobrze !!


2

Możesz to zrobić dynamicznie w ten sposób:

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

0

Z pewnych powodów, których nie rozumiałem, utworzenie folderu / .htaccess i dodanie Deny from All nie zadziałało. Nie wiem dlaczego, wydawało się to proste, ale nie zadziałało, dodanie RedirectMatch 403 ^ / folder /.*$ do głównego htaccess działało.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.