.htaccess 파일에 대한 액세스를 거부하는 방법


112

다음 .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

방문자가 다음 파일에 액세스하는 것을 금지하려고합니다.

domain.com/inscription/log.txt

하지만 위의 내용이 작동하지 않습니다. 브라우저에서 원격으로 파일에 계속 액세스 할 수 있습니다.

답변:


187

htaccess 파일 내에서 <Files>지시문 의 범위는 해당 디렉토리에만 적용됩니다 (하위 디렉토리의 htaccess에있는 규칙 / 지시문이 상위 디렉토리를 대체하여 적용될 때 혼동을 피하기 위해).

따라서 다음을 가질 수 있습니다.

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

Apache 2.4+의 경우 다음을 사용합니다.

<Files "log.txt">  
  Require all denied
</Files>

inscription디렉토리 의 htaccess 파일에서 . 또는 mod_rewrite를 사용하여 htaccess 파일과 log.txt에 대한 액세스를 거부하는 두 경우를 모두 처리 할 수 ​​있습니다.

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

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

IIS를 사용하는 경우 대신 web.config 파일에서이 작업을 수행하십시오.
Shaun Luttin 2014

1
재 작성 규칙을 사용하면 내 코드가 * .txt의 내용에 액세스하는 것을 거부합니다. 이 문제를 어떻게 해결할 수 있습니까?
Pantss

8
" <Files>지시문 의 범위는 해당 디렉토리에만 적용됩니다"-그렇지 않습니다. 해당 디렉터리 그 아래의 모든 하위 디렉터리에 적용됩니다 . 그래서 <Files "log.txt">잡을 것 /log.txt 하고 /inscription/log.txt .
MrWhite

1
Order Allow,Deny2.4에서 더 이상 사용되지 않기 때문에이 답변을 업데이트 할 수 있습니까 ?
Telarian

18

강력한 패턴 매칭 — 이것이 제가 Perishable Press에서 사용하는 방법입니다. 강력한 패턴 일치를 사용하는이 기술은“ .hta ”,“. HTA ”또는 대소 문자를 구분하지 않는 조합이 포함 된 파일에 대한 외부 액세스를 방지 합니다. 설명을 위해이 코드는 다음 요청을 통한 액세스를 차단합니다.

  • .htaccess
  • .HTACCESS
  • .hTaCcEsS
  • testFILE.htaccess
  • filename.HTACCESS
  • FILEROOT.hTaCcEsS

..etc. 등. 분명히이 방법은 사이트의 HTAccess 파일을 보호하는 데 매우 효과적입니다. 또한이 기술에는 강화 " 모두 만족 "지침 도 포함됩니다 . 이 코드는 도메인의 루트 HTAccess 파일에 있어야합니다.

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

1
이 코드를 사용할 때 500 내부 서버 오류가 발생합니다. 왜 그런지 아세요? 저는 Wordpress를 사용하고 있습니다.
Keryn Gill

8
사용자가 dotfile에 액세스하지 못하도록하는 것이 더 합리적이지 않습니까? 같은 것을 사용합니다 <Files ~"^\..*">.
Steen Schütt

1
물결표와 첫 번째 따옴표 사이에 공백이 필요합니다. 적어도 나에게는 필요했습니다. ~ SPACE "
Art Geigel

.files를 비활성화하는 동일한 동작을 얻었습니다. <filesMatch "^ \ .. *"> order allow, deny deny from all </ FilesMatch>
Pinonirvana

14

나는 현재 받아 들여지는 대답이 정확하지 않다고 생각합니다. 예를 들어 .htaccess가상 서버 (apache 2.4)의 루트에 다음 파일이 있습니다.

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

이렇게하면 reminder.php하위 디렉터리에있는 외부 액세스가 방지 됩니다. .htaccessApache 2.2 서버에 동일한 효과 가있는 유사한 파일이 있습니다.

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

나는 확실히 모르지만 나는 그것이에 특히 하위 디렉토리를 정의하려는 시도이다 의심 .htaccess파일, <Files ./inscription/log.txt> 그것이 실패의 원인이된다. .htaccess파일을 동일한 디렉토리에 log.txtie 디렉토리에 두는 것이 더 간단하며 inscription거기에서 작동합니다.


1
당신은 내 upvote를 얻습니다. 이것은 내 아파치 2.4에서도 작동했습니다.
Tschallacka

3

.htaccess 파일에 아래 줄을 넣고 원하는대로 파일 이름을 바꿉니다.

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

-4

<Directory>예를 들어 태그를 사용할 수 있습니다 .

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

사용하는 ./경우 /사이트의 루트 디렉토리를 확인하므로 사용하지 마십시오 .

더 자세한 예는 http://httpd.apache.org/docs/2.2/sections.html을 참조하십시오 .


2
그러나 <Directory>컨테이너는 .htaccess. 에서 .htaccess.htaccess파일 자체가 "입니다 디렉토리 컨테이너"(디렉토리 별 설정 파일).
MrWhite

그러면 리디렉션을 사용할 수 있습니다. 사용자가 비문 디렉토리 로 이동하면 사용자가로 Redirect /inscription/log.txt access_denied.html리디렉션됩니다 . access_denied.htmlinscription/log.txt
Nicholas English
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.