2012-07-30 17 views
78

Mam następujący plik .htaccess:Jak odmówić dostępu do pliku w .htaccess

RewriteEngine On 
RewriteBase/

# Protect the htaccess file 
<Files .htaccess> 
Order Allow,Deny 
Deny from all 
</Files> 

# Protect log.txt 
<Files ./inscription/log.txt> 
Order Allow,Deny 
Deny from all 
</Files> 

# Disable directory browsing 
Options All -Indexes 

Próbuję zabronić odwiedzających do dostępu następujący plik:

domain.com/inscription/log.txt 

ale co ja Powyższe nie działa: nadal mogę uzyskać dostęp do pliku z przeglądarki zdalnie.

Odpowiedz

137

W pliku htaccess zakres dyrektywy <Files> odnosi się tylko do tego katalogu (domyślam się, aby uniknąć nieporozumień, gdy reguły/dyrektywy w htaccess of podkatalogów zostaną zastosowane do superplików z nadrzędnego).

Więc można mieć:

<Files "log.txt"> 
Order Allow,Deny 
Deny from all 
</Files> 

w pliku .htaccess w katalogu inscription. Lub można użyć mod_rewrite do sortowania obsługiwać oba przypadki odmowy dostępu do pliku .htaccess jak log.txt:

RewriteRule /?\.htaccess$ - [F,L] 

RewriteRule ^/?inscription/log\.txt$ - [F,L] 
+0

Jeśli używasz IIS, należy to zrobić w pliku web.config zamiast. –

+0

Korzystanie z reguł przepisywania odmawia mojemu własnemu kodowi dostępu do zawartości * .txt. Jak sobie z tym poradzisz? – Pantss

+3

"zakres dyrektywy" "odnosi się tylko do tego katalogu" - nie, nie ma. Dotyczy to katalogu _i wszystkich podkatalogów znajdujących się pod nim. Tak więc '' złapie '/ log.txt' _and_'/inscription/log.txt'. – MrWhite

13

Strong wzorzec dopasowania - Jest to metoda, która używam tu w Łatwo Psujących Press. Dzięki silnemu dopasowaniu do wzorca technika ta zapobiega zewnętrznemu dostępowi do dowolnego pliku zawierającego ".hta", ".HTA" lub dowolnej kombinacji niewrażliwych na wielkość znaków. Aby zilustrować ten kod uniemożliwi dostęp za pośrednictwem jednego z następujących wniosków:

  • .htaccess
  • .htaccess
  • .htaccess
  • testFILE.htaccess
  • filename.HTACCESS
  • FILEROOT. hTaCCeSs

..etc., itp. Oczywiście ta metoda jest bardzo skuteczna. ve w zabezpieczaniu plików HTAccess Twojej witryny. Ponadto technika ta obejmuje również wzmacniającą dyrektywę "Satisfy All". Zauważ, że ten kod powinien zostać umieszczony w głównym pliku HTAccess Twojej domeny:

# STRONG HTACCESS PROTECTION 
<Files ~ "^.*\.([Hh][Tt][Aa])"> 
order allow,deny 
deny from all 
satisfy all 
</Files> 
+0

Otrzymuję błąd 500 wewnętrzny serwer podczas korzystania z tego kodu. Każdy pomysł, dlaczego? Używam Wordpressa. –

+3

Czy nie ma większego sensu po prostu zabronić użytkownikom dostępu do plików dot? Używając czegoś w rodzaju ''. –

7

Nie sądzę, aby aktualnie zaakceptowana odpowiedź była prawidłowa. Na przykład, miał następujący plik .htaccess w korzeniu serwera wirtualnego (apache'a 2,4)

<Files "reminder.php"> 
require all denied 
require host localhost 
require ip 127.0.0.1 
require ip xxx.yyy.zzz.aaa 
</Files> 

Zapobiega zewnętrzny dostęp do reminder.php które znajduje się w kartotece. Mam podobny plik .htaccess na moim Apache 2.2 Server z tym samym skutkiem:

<Files "reminder.php"> 
     Order Deny,Allow 
     Deny from all 
     Allow from localhost 
     Allow from 127.0.0.1 
    Allow from xxx.yyy.zzz.aaa 
</Files> 

nie wiem na pewno, ale podejrzewam, że jest to próba zdefiniowania podkatalogu specjalnie w pliku .htaccess, mianowicie<Files ./inscription/log.txt>, co powoduje niepowodzenie. Łatwiej byłoby umieścić plik .htaccess w tym samym katalogu, co log.txt, tj.w katalogu inscription i będzie tam działać.

+0

Dostajesz moją wiadomość, to działało również dla mojego Apache 2.4. – Tschallacka

0

Umieść poniższy wiersz w pliku .htaccess i zastąpić nazwę pliku, jak chcesz

RewriteRule ^(test\.php) - [F,L,NC] 
-2

Cóż można użyć <Directory> tag na przykład:

<Directory /inscription> 
    <Files log.txt> 
    Order allow,deny 
    Deny from all 
    </Files> 
</Directory> 

nie wolno używać ./ ponieważ jeśli po prostu użyjesz /, zajrzysz do katalogu głównego twojej witryny.

Bardziej szczegółowy przykład wizyty http://httpd.apache.org/docs/2.2/sections.html

+1

Ale '' kontener nie jest dozwolony w '.htaccess'. W '.htaccess', sam plik' .htaccess' jest "_Directory_ container" (plik konfiguracyjny dla katalogu). – MrWhite

+0

Więc możesz użyć przekierowania. 'Redirect /inscription/log.txt access_denied.html' Przekieruje użytkownika do' access_denied.html', jeśli użytkownik przejdzie do 'inscription/log.txt' w katalogu napisów. –

Powiązane problemy