一部のアプリケーションでは、ユーザーは独自のファイルをアップロードできます。これは非常に大きなファイルになる可能性があるため、ユーザーは独自の FTP クライアント経由でアップロードできます。
もちろん、サーバー上の他のすべてのファイルにアクセスできる PHP ファイルをアップロードしてほしくはありません。この動作を防ぐ方法の 1 つは、これらのフォルダー内の特定のファイル タイプ (php、rb、py など) へのアクセスのみを拒否することです。
フォルダー、ファイル、フォルダー内のファイルへのアクセスを拒否する方法は見つかりましたが、フォルダー内のファイルの種類については何も見つかりませんでした。
私が見つけたものを組み合わせてみました:
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>
に変更する
<Files uploads/ "\.inc$">
Order allow,deny
Deny from all
</Files>
または別の方法
RewriteRule ^(\.php) - [F,L,NC]
に
RewriteRule ^(uploads/\.php) - [F,L,NC]
しかし、どのような構文を使用すればよいのかわかりません。
たとえば、次のようなもの(基本的な例)が考えられます。
/index.php
/uploads/
hack.php
hack.rb
hack.py
pony.jpg
hack.php/rb/py は利用できないようにしたいのですが、それ以外はすべて利用できるようにしたいです。どのような構文を使用すればよいでしょうか?
ベストアンサー1
FilesMatch ディレクティブはファイル名のみを対象とします。パス部分はまったく考慮しません。
ルートの.htaccessファイルにサブディレクトリを制御するためのディレクティブを指定したい場合は、次のようにします。書き換え。
これを試して:
RewriteRule ^uploads/.*\.(php|rb|py)$ - [F,L,NC]
上記は、/uploads ディレクトリまたはそのサブディレクトリ内の .php または .rb または .py で終わるファイル名をすべてブロックします。たとえば、次のファイルはブロックされます。
- /アップロード/何か.php
- /アップロード/何か/more.php
書き換えルールの先頭にスラッシュがないことに注意してください。ディレクティブで使用するパスは、ディレクティブを配置する場所によって異なります。上記のディレクティブは、ドキュメントルートの.htaccessファイルに配置すると、次のディレクトリ内のファイルに対して機能します。アップロードドキュメント ルートの直下にあります。
上記はあなたの質問に対する答えですが、許可する方が安全ファイルをブロックするのではなく、特定のファイルのみを実行します。多くの場合、サーバーはリストした拡張子以外の拡張子を持つファイルを実行します。
次のようなことができます:
RewriteCond %{REQUEST_URI} ^/uploads [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g|png|gif)$ [NC]
RewriteRule .* - [F,L]
上記の場合、リクエスト URI が /uploads で始まっているが、指定された拡張子のいずれかで終わっていない場合、そのリクエストは禁止されます。拡張子は必要に応じて変更できます。ただし、そのようにすると、拡張子をブロックし忘れたことに気付くのが遅すぎるという事態にならずに、必要に応じて拡張子を許可できます。
このルール(あなたの質問から)
RewriteRule ^(uploads/\.php) - [F,L,NC]
ブロックします
- /アップロード/.php
- /uploads/.phpもっと見る
ただし、ディレクトリ名とファイル拡張子の間には何も許可されません。
書き換えルールを使用する場合は、正規表現についてさらに学ぶ必要があるかもしれません。私はよく正規表現何かを調べる必要があるとき。