web-dev-qa-db-ja.com

.htaccessを使用して、ディレクトリ(すべてのサブディレクトリを含む)でPHP)を無効にします

私は、人々がファイルやhtmlページなどをアップロードできるウェブサイトを作っています。今、私は問題を抱えています。私はこのようなディレクトリ構造を持っています:

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

ここで、PHPを無効にしますが、/ USERS内のディレクトリとサブディレクトリでサーバー側インクルードを有効にします

これを行うことができますか(および方法:))?前もって感謝します。

ところで、私はWAMPサーバーを使用しています

61
user142019

.htaccessファイルで engineオプション を無効にしてみてください:

php_flag engine off
113
Gumbo

サブディレクトリへのすべてのアクセスを無効にするには(最も安全な)使用:

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

PHPファイルが直接提供されないようにブロックする場合は、次のようにします。

1-サーバーがPHPとして認識するファイル拡張子を知っていることを確認してください(そして、htaccessで他の人がオーバーライドできないようにしてください)。私のサーバーの1つは次のように設定されます。

# 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>

または、Locationを使用してphpファイルに一致させます(上記のファイルのアプローチを好む)

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

Mod_phpを使用している場合は、(/ USERSの.htaccessまたはUSERSディレクトリのhttpd.confに)置くことができます

RemoveHandler .php

または

RemoveType .php

(PHPがAddHandlerまたはAddTypeを使用して有効になっているかどうかによって異なります)

別のディレクトリから実行されるPHPファイルは、Apacheを通過しないため、/ USERSにファイルを含めることができます(open_basedirの制限がないと仮定)。 Apacheを使用してphpファイルにアクセスする場合、プレーンテキストとしてサーバーに保存されます。

編集

ファイルへのアクセスを拒否するLance Rushingのソリューションの方がおそらく良い

13
Tom Haigh
<Directory /your/directorypath/>
     php_admin_value engine Off
</Directory>
10
Domus

これにより、ソースコードが実行される代わりに表示されます。

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

一度使用して、他の同僚がローカルネットワークからソースコードに読み取りアクセスできるようにしました(迅速で汚い代替手段にすぎません)。

警告!

ダンが先ほど指摘したように、この方法は本番環境では決して使用すべきではありません。 PHPファイルを実行または表示する試みをブロックするため、受け入れられた回答に従ってください。

ユーザーにphpファイルを共有させたい(そして他の人にソースコードを表示させる)場合、gitやwikiなどのより良い方法があります。

この方法は避けてください! (警告されています。教育目的でここに残してください)

9
lepe

これらの答えはどれも私にとってはうまくいきません(500エラーを生成するか、何もしません)。これはおそらく、Apache構成にアクセスできないホストサーバーで作業しているためです。

しかし、これは私のために働いた:

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

この行は、.phpで終わり、このサブディレクトリで終わるURLに対して403 Forbiddenエラーを生成します。

@ Oussama 正しい方向に私を導きます ここ 、彼に感謝します。

3

これはやり過ぎかもしれませんが、PHP files .php-後で誰かが来て、.php4 あるいは .htmlしたがって、それらはPHPによって処理されます。 Apacheの別のインスタンスまたは静的コンテンツのみを提供する何かから、それらのディレクトリからファイルを提供する方が良いかもしれません。

1
Dominic Rodger

本番環境では、リクエストをPHP処理をホームページまたは404ページに無効にする必要があるディレクトリの下の.phpファイルにリダイレクトします。これにより、ソースコードは明らかになりませんエンジンは、アップロードされた悪意のあるコードをインデックスに登録する必要がありますか?)、訪問者や、悪用しようとする悪意のあるハッカーにとってもよりフレンドリーに見えます。

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

必要に応じてディレクティブを調整します。

0