htaccess로 폴더 및 파일에 대한 직접 액세스 거부
시나리오는 다음과 같습니다.
index.php
루트 폴더에 파일 이 있습니다- 일부 파일은 폴더
index.php
에 포함되어 있습니다includes
. - 1 개의 다른 파일 (
submit.php
)이 양식 제출 조치를위한 루트 폴더에 있습니다.
includes
htaccess 로 폴더 의 파일에 대한 직접 사용자 액세스를 제한하고 싶습니다 . 또한 submit.php
. 그러나 include는 index.php
파일에서 작동 합니다. 마찬가지로 사용자가을 입력 www.domain.com/includes/somepage.php
하면이를 제한합니다 (오류 페이지로 리디렉션 될 수 있음).
includes
폴더를 웹 루트 외부 로 이동 하지만 전체 includes
폴더에 대한 직접 액세스를 차단하려는 경우 다음 .htaccess
을 포함 하는 파일을 해당 폴더에 넣을 수 있습니다 .
deny from all
그렇게하면 해당 폴더에서 파일을 열 수는 없지만 아무런 문제없이 PHP에 포함시킬 수 있습니다.
이것은 순수한 mod_rewrite
기반 솔루션입니다.
RewriteRule ^(includes/|submit\.php) - [F,L,NC]
URI 중 하나가 포함 된 경우이 사용을 금지 오류가 표시됩니다 /includes/
또는/submit.php
Files 지시문을 사용하고 모든 파일에 대한 액세스를 허용하지 않은 다음 다시 사용하여 액세스 가능한 파일을 설정하십시오.
<Files ~ "^.*">
Deny from all
</Files>
<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
Allow from all
</Files>
1 라이너 mod_alias 기반 솔루션 :
RedirectMatch 403 ^/folder/file.php$
/folder/file.php에 대해 금지 된 오류가 표시됩니다
올바르게 이해하면 include 폴더에 대한 액세스를 거부하고 싶습니까?
include 폴더에 'DENY FROM ALL'지시문이있는 .htaccess가 트릭을 수행합니다.
귀하의 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 분에 불과합니다.
더 높은 수준으로 설정된 다른 옵션에 따라 include 디렉토리의 .htaccess 파일에 다음을 넣어야 할 수도 있습니다.
Satisfy all
Order deny,allow
Deny from all
상위 디렉토리가 라인을 포함하여 기본 인증을 정의했을 때이 문제가 발생했습니다.
Satisfy any
이로 인해 사용자가 인증되었으므로 거부가 모두 적용되지 않았습니다.
.htaccess
파일에 아래 명령을 추가 할 수 있습니다
Deny from all
ErrorDocument 403 "nothing is here"
무단 액세스의 경우 "아무것도 없습니다"메시지가 표시됩니다.
오류 코드로 특정 페이지로 리디렉션하려는 경우 다음과 같이 명령을 정의 할 수 있습니다.
ErrorDocument 404 "/errors/404.html"
로 리디렉션되고 /errors/404.html
사용자 정의 페이지를 찾을 수 없음 화면이 표시됩니다.
참고 URL : https://stackoverflow.com/questions/9282124/deny-direct-access-to-a-folder-and-file-by-htaccess
'Programming' 카테고리의 다른 글
Django 템플릿 내에서 컬렉션의 크기를 어떻게 확인할 수 있습니까? (0) | 2020.07.05 |
---|---|
클릭 이벤트가 이미 바인딩되어 있는지 확인하는 방법-JQuery (0) | 2020.07.05 |
Android : 의도를 사용하여 일반 텍스트 공유 (모든 메시징 앱에) (0) | 2020.07.05 |
정규식은 String.matches ()에서 작동하지 않습니다. (0) | 2020.07.05 |
텍스트 상자가 포커스를 잃을 때까지 jQuery 텍스트 상자 변경 이벤트가 발생하지 않습니까? (0) | 2020.07.05 |