私は、人々がファイルやhtmlページなどをアップロードできるウェブサイトを作っています。今、私は問題を抱えています。私はこのようなディレクトリ構造を持っています:
-/USERS
-/DEMO1
-/DEMO2
-/DEMO3
-/etc... (every user has his own direcory here)
-index.php
-control_panel.php
-.htaccess
ここで、PHPを無効にしますが、/ USERS内のディレクトリとサブディレクトリでサーバー側インクルードを有効にします
これを行うことができますか(および方法:))?前もって感謝します。
ところで、私はWAMPサーバーを使用しています
.htaccessファイルで engine
オプション を無効にしてみてください:
php_flag engine off
サブディレクトリへのすべてのアクセスを無効にするには(最も安全な)使用:
<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>
Mod_phpを使用している場合は、(/ USERSの.htaccessまたはUSERSディレクトリのhttpd.confに)置くことができます
RemoveHandler .php
または
RemoveType .php
(PHPがAddHandlerまたはAddTypeを使用して有効になっているかどうかによって異なります)
別のディレクトリから実行される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>
一度使用して、他の同僚がローカルネットワークからソースコードに読み取りアクセスできるようにしました(迅速で汚い代替手段にすぎません)。
警告!:
ダンが先ほど指摘したように、この方法は本番環境では決して使用すべきではありません。 PHPファイルを実行または表示する試みをブロックするため、受け入れられた回答に従ってください。
ユーザーにphpファイルを共有させたい(そして他の人にソースコードを表示させる)場合、gitやwikiなどのより良い方法があります。
この方法は避けてください! (警告されています。教育目的でここに残してください)
これはやり過ぎかもしれませんが、PHP files .php
-後で誰かが来て、.php4
あるいは .html
したがって、それらはPHPによって処理されます。 Apacheの別のインスタンスまたは静的コンテンツのみを提供する何かから、それらのディレクトリからファイルを提供する方が良いかもしれません。
本番環境では、リクエストを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>
必要に応じてディレクティブを調整します。