htaccess로 폴더 및 파일에 대한 직접 액세스 거부


134

시나리오는 다음과 같습니다.

  • index.php루트 폴더에 파일 이 있습니다
  • 일부 파일은 폴더 index.php에 포함되어 있습니다 includes.
  • 1 개의 다른 파일 ( submit.php)이 양식 제출 조치를위한 루트 폴더에 있습니다.

includeshtaccess 로 폴더 의 파일에 대한 직접 사용자 액세스를 제한하고 싶습니다 . 또한 submit.php. 그러나 include는 index.php파일에서 작동 합니다. 마찬가지로 사용자가을 입력 www.domain.com/includes/somepage.php하면이를 제한합니다 (오류 페이지로 리디렉션 될 수 있음).

답변:


266

includes폴더를 웹 루트 외부 로 이동 하지만 전체 includes폴더에 대한 직접 액세스를 차단하려는 경우 다음 .htaccess을 포함 하는 파일을 해당 폴더에 넣을 수 있습니다 .

deny from all

그렇게하면 해당 폴더에서 파일을 열 수는 없지만 아무런 문제없이 PHP에 포함시킬 수 있습니다.


7
다른 파일이 해당 폴더에있는 파일에 대한 아약스 요청을 할 수 있습니까?
Chaitanya Chandurkar

16
@ChaitanyaChandurkar 아니오, 아약스 요청은 일반적인 http 요청이므로 거부됩니다.
jeroen

Sr b / c I 새로운 웹 프로그래밍. index.php 파일에 액세스하기 위해 예외를 어떻게 추가 할 수 있습니까?
PhatHV

나는 모든 것을 거부하고 로그인 페이지를 표시하지 않는 모든 URL을 제한했습니다. : :
Aamir

@Aamir 맞습니다. 해당 폴더의 URL에 액세스 할 수 없지만 문제없이 다른 파일에 포함시킬 수 있습니다.
jeroen

56

이것은 순수한 mod_rewrite기반 솔루션입니다.

RewriteRule ^(includes/|submit\.php) - [F,L,NC]

URI 중 하나가 포함 된 경우이 사용을 금지 오류가 표시됩니다 /includes/또는/submit.php


3
제출 파일 주소 좋은 직업
CTS_AE

29

Files 지시문을 사용하여 모든 파일에 대한 액세스를 허용하지 않은 다음 다시 사용하여 액세스 가능한 파일을 설정하십시오.

<Files ~ "^.*">
  Deny from all
</Files>

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
  Allow from all
</Files>

7
나는 그의 문제가 해결되었는지 아닌지 질문을 게시 한 사람에 대해 확신하지 못하지만 이것은 다중 답변이 많은 회원을 도울 수있는 SO의 아름다움입니다. 이 마지막 답변은 내 문제를 해결했습니다. 사이트가 CSS 파일을 받도록하고 싶지만 ttf 또는 otf 글꼴 및 붐에 액세스 할 수 없습니다! 해결되었습니다.
Moxet Khan

이 후 나는 하위 폴더에있는 파일에 액세스 abel되지 않습니다
Gintare Statkute

14

1 라이너 mod_alias 기반 솔루션 :

RedirectMatch 403 ^/folder/file.php$

/folder/file.php에 대해 금지 된 오류가 표시됩니다


1
+1- regex를 사용하여 전체 폴더에 404 를 적용하면 아무도 어떤 파일이 있는지조차 볼 수 없으므로 실제로 매우 좋습니다 ^folder.
bytecode77

9

올바르게 이해하면 include 폴더에 대한 액세스를 거부하고 싶습니까?

include 폴더에 'DENY FROM ALL'지시문이있는 .htaccess가 트릭을 수행합니다.


8

귀하의 Q는 jeroen과 anubhava의 솔루션이 파트 I에서 작동하여 / include에 대한 액세스를 거부하는 두 부분으로 구성됩니다. anubhava는 파트 II에도 적용됩니다. DOCROOT/.htaccess어쨌든 사용하기 때문에 후자를 선호 하며 이것은 모든 제어를 하나의 파일로 유지합니다.

그러나 내가 논의하고 싶지 않은 것은 "접근 거부"라는 개념이다 submit.php. 사용하지 않으려면submit.php 왜 DOCROOT에 있습니까? 여기에 대한 답변은 일부 양식에서 작업 대상으로 사용하고 스팸봇과 같이 양식이 직접 제출되지 않고 제출 될 때만 실행되기를 원한다고 생각합니다.

이것이 사실이라면 아누 바바의 파트 II를 사용할 수 없으므로 양식이 실패 할 수 있습니다. 여기서 할 수있는 일은 (i) .htaccess리퍼러가 자신의 색인 페이지인지 확인하기 위해 확인하는 것입니다.

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php   [NC]
RewriteRule ^submit\.php$    -                                   [F]

그리고 (ii) PHP index.php 양식 생성기에는 타임 스탬프 및 유효성 검사를위한 숨겨진 필드가 포함되어 있습니다. 유효성 검사는 타임 스탬프의 MD5의 첫 10 자이며 일부 내부 비밀 일 수 있습니다. 제출을 처리하면 (i) 타임 스탬프와 유효성 검사가 일치하는지 검증하고 (ii) 타임 스탬프가 현재 시간의 15 분 이내인지 확인할 수 있습니다.

이렇게하면 스패머가 유효한 타임 스탬프 / 검증 쌍을 얻을 수있는 유일한 실질적인 방법으로 스팸을 방지 할 수 있지만이 스크랩은 수명이 15 분에 불과합니다.


6

더 높은 수준으로 설정된 다른 옵션에 따라 include 디렉토리의 .htaccess 파일에 다음을 넣어야 할 수도 있습니다.

Satisfy all
Order deny,allow
Deny from all

나는 상위 디렉토리가 라인을 포함하여 기본 인증을 정의했을 때 이것에 부딪쳤다.

Satisfy any

이로 인해 사용자가 인증되었으므로 거부가 모두 적용되지 않았습니다.


1

.htaccess파일에 아래 명령을 추가 할 수 있습니다

Deny from all
ErrorDocument 403 "nothing is here"

무단 액세스의 경우 "아무것도 없습니다"메시지가 표시됩니다.

오류 코드로 특정 페이지로 리디렉션하려는 경우 다음과 같이 명령을 정의 할 수 있습니다.

ErrorDocument 404 "/errors/404.html"

로 리디렉션되고 /errors/404.html사용자 정의 페이지를 찾을 수 없음 화면이 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.