복붙노트

.htaccess를 사용하여 디렉토리 (모든 하위 디렉토리 포함)에서 PHP를 비활성화합니다.

PHP

.htaccess를 사용하여 디렉토리 (모든 하위 디렉토리 포함)에서 PHP를 비활성화합니다.

사람들이 파일, HTML 페이지 등을 업로드 할 수있는 웹 사이트를 만들고 있습니다 ... 지금 문제가 있습니다. 다음과 같은 디렉토리 구조가 있습니다.

-/USERS
    -/DEMO1
    -/DEMO2
    -/DEMO3
    -/etc... (every user has his own direcory here)
-index.php
-control_panel.php
-.htaccess

이제 PHP를 비활성화하고 싶지만 / USERS 내부의 디렉토리와 하위 디렉토리에 서버 측 포함을 활성화하십시오.

이 작업을 수행 할 수 있습니까 (및 방법 :))? 미리 감사드립니다.

BTW, 나는 WAMP 서버를 사용한다.

해결법

  1. ==============================

    1..htaccess 파일에서 엔진 옵션을 비활성화하십시오.

    .htaccess 파일에서 엔진 옵션을 비활성화하십시오.

    php_flag engine off
    
  2. ==============================

    2.하위 디렉토리 (가장 안전한)에 대한 모든 액세스를 비활성화하려면 다음을 사용하십시오.

    하위 디렉토리 (가장 안전한)에 대한 모든 액세스를 비활성화하려면 다음을 사용하십시오.

    <Directory full-path-to/USERS>
         Order Deny,Allow
         Deny from All
     </Directory>
    

    PHP 파일 만 직접 처리하는 것을 차단하려면 다음을 수행하십시오.

    1 - 서버가 PHP로 인식하는 파일 확장명을 알고 있는지 확인하십시오. htaccess에서 사용자가 재정의하도록 허용하지 마십시오. 내 서버 중 하나가 다음으로 설정되었습니다.

    # Example of existing recognized extenstions:
    AddType application/x-httpd-php .php .phtml .php3
    

    2 - Extensions를 FilesMatch (또는 LocationMatch)에 추가하면,

     <Directory full-path-to/USERS>
         <FilesMatch "(?i)\.(php|php3?|phtml)$">
                Order Deny,Allow
                Deny from All
        </FilesMatch>
     </Directory>
    

    또는 위치를 사용하여 PHP 파일과 일치시킵니다 (위의 파일 접근 방식을 선호합니다)

    <LocationMatch "/USERS/.*(?i)\.(php3?|phtml)$">
         Order Deny,Allow
         Deny from All
    </LocationMatch>
    
  3. ==============================

    3.mod_php를 사용한다면, (USERS 디렉토리의 .htaccess 파일이나 / USERS 파일이나 httpd.conf 파일에)

    mod_php를 사용한다면, (USERS 디렉토리의 .htaccess 파일이나 / USERS 파일이나 httpd.conf 파일에)

    RemoveHandler .php
    

    또는

    RemoveType .php
    

    (PHP가 AddHandler 또는 AddType을 사용하여 활성화되었는지 여부에 따라 다름)

    다른 디렉토리에서 실행되는 PHP 파일은 / USERS에 파일을 포함 할 수 있습니다 (open_basedir 제한이 없다고 가정). 이는 Apache를 통과하지 않기 때문입니다. 아파치를 사용하여 PHP 파일에 접근하면 일반 텍스트로 serverd됩니다.

    편집하다

    파일에 대한 액세스를 거부하는 Lance Rushing의 해결책은 아마 더 좋습니다.

  4. ==============================

    4.

    <Directory /your/directorypath/>
         php_admin_value engine Off
    </Directory>
    
  5. ==============================

    5.그러면 소스 코드가 실행되는 대신 표시됩니다.

    그러면 소스 코드가 실행되는 대신 표시됩니다.

    <VirtualHost *>
        ServerName sourcecode.testserver.me
        DocumentRoot /var/www/example
        AddType text/plain php
    </VirtualHost>
    

    다른 동료가 로컬 네트워크의 소스 코드에 대한 읽기 권한을 가질 수 있도록 한 번 사용했습니다 (빠르고 간단하고 대체적인 방법).

    경고!

    Dan이 언젠가 전에 지적했듯이,이 방법은 프로덕션에서 사용되어서는 안됩니다. php 파일을 실행하거나 표시하려는 시도를 차단하므로 허용 된 답변을 따르십시오.

    사용자가 php 파일을 공유하고 (다른 사용자가 소스 코드를 표시하게하려면) git, wiki 등의 더 나은 방법이 있습니다.

    이 방법은 피해야합니다! (경고를 받았다. 교육 목적으로 여기에 놓아 둠)

  6. ==============================

    6.이것은 지나친 것일 수 있습니다. 그러나 PHP 파일의 확장자에 의존하는 모든 작업은 .php가됩니다. 나중에 누군가가 따라오고 .php4 또는 .html에 대한 처리기를 추가하면 PHP에서 처리하게됩니다. 정적 인 내용 만 제공하는 Apache 또는 다른 인스턴스의 디렉토리에서 파일을 제공하지 않는 것이 좋습니다.

    이것은 지나친 것일 수 있습니다. 그러나 PHP 파일의 확장자에 의존하는 모든 작업은 .php가됩니다. 나중에 누군가가 따라오고 .php4 또는 .html에 대한 처리기를 추가하면 PHP에서 처리하게됩니다. 정적 인 내용 만 제공하는 Apache 또는 다른 인스턴스의 디렉토리에서 파일을 제공하지 않는 것이 좋습니다.

  7. ==============================

    7.그 답 중 아무 것도 나를 위해 일하고 있지 않습니다 (500 오류를 생성하거나 아무 것도하지 않음). 아파치 설정에 액세스 할 수없는 호스트 서버에서 작업하고 있기 때문일 수 있습니다.

    그 답 중 아무 것도 나를 위해 일하고 있지 않습니다 (500 오류를 생성하거나 아무 것도하지 않음). 아파치 설정에 액세스 할 수없는 호스트 서버에서 작업하고 있기 때문일 수 있습니다.

    그러나 이것은 나를 위해 일했다 :

    RewriteRule ^. * \. php $ - [F, L]

    이 줄은 .php로 끝나고이 하위 디렉토리에서 끝나는 URL에 대해 403 Forbidden 오류를 생성합니다.

    @Oussama는 저에게 옳은 방향으로 인도합니다. 덕분입니다.

  8. ==============================

    8.이 시도:

    이 시도:

        <FilesMatch "\.((php[0-9]?)|p?html?|pl|sh|java|cpp|c|h|js|rc)$">
        SetHandler None
        </FilesMatch>
    
  9. from https://stackoverflow.com/questions/1271899/disable-php-in-directory-including-all-sub-directories-with-htaccess by cc-by-sa and MIT license