programing

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

nasanasas 2020. 11. 29. 11:45
반응형

.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 서버를 사용합니다.


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

php_flag engine off

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

<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-확장자에 따라 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>

mod_php를 사용하는 경우 (/ USERS의 .htaccess 또는 USERS 디렉토리의 경우 httpd.conf에) 넣을 수 있습니다.

RemoveHandler .php

또는

RemoveType .php

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

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

편집하다

파일에 대한 액세스를 거부하는 Lance Rushing의 솔루션이 아마도 더 낫습니다.


<Directory /your/directorypath/>
     php_admin_value engine Off
</Directory>

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

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

한 번은 다른 동료가 로컬 네트워크에서 소스 코드에 대한 읽기 액세스 권한을 가질 수 있도록 한 번 사용했습니다 (빠르고 더러운 대안).

경고! :

As Dan pointed it out sometime ago, this method should never be used in production. Please follow the accepted answer as it blocks any attempt to execute or display php files.

If you want users to share php files (and let others to display the source code), there are better ways to do it, like git, wiki, etc.

This method should be avoided! (you have been warned. Left it here for educational purposes)


None of those answers are working for me (either generating a 500 error or doing nothing). That is probably due to the fact that I'm working on a hosted server where I can't have access to Apache configuration.

But this worked for me :

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

This line will generate a 403 Forbidden error for any URL that ends with .php and ends up in this subdirectory.

@Oussama lead me to the right direction here, thanks to him.


This might be overkill - but be careful doing anything which relies on the extension of PHP files being .php - what if someone comes along later and adds handlers for .php4 or even .html so they're handled by PHP. You might be better off serving files out of those directories from a different instance of Apache or something, which only serves static content.


On production I prefer to redirect the requests to .php files under the directories where PHP processing should be disabled to a home page or to 404 page. This won't reveal any source code (why search engines should index uploaded malicious code?) and will look more friendly for visitors and even for evil hackers trying to exploit the stuff. Also it can be implemented in mostly in any context - vhost or .htaccess. Something like this:

<DirectoryMatch "^${docroot}/(image|cache|upload)/">
    <FilesMatch "\.php$">
        # use one of the redirections
        #RedirectMatch temp "(.*)" "http://${servername}/404/"
        RedirectMatch temp "(.*)" "http://${servername}"
    </FilesMatch>
</DirectoryMatch>

Adjust the directives as you need.


Try this:

    <FilesMatch "\.((php[0-9]?)|p?html?|pl|sh|java|cpp|c|h|js|rc)$">
    SetHandler None
    </FilesMatch>

참고URL : https://stackoverflow.com/questions/1271899/disable-php-in-directory-including-all-sub-directories-with-htaccess

반응형