[php] 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
이로 인해 사용자가 인증되었으므로 거부가 모두 적용되지 않았습니다.