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.

snoob dogg
źródło
1
tylko po to, aby nie Options -Indexes

Odpowiedzi:

215

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

Deny from all
anubhava
źródło
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.

Amit Verma
źródło
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 
Andy
źródło
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

arthankamal
źródło
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
Marvin
źródło
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 .

Ojciec chrzestny
źródło
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

ravisoni
źródło
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 !!

Meraj
źródło
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);
RatajS
źródło
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.

Chimdi
źródło