私のユーザーは、PHP WebアプリケーションのCMSバックエンドに大きなファイル(50-100MB)をアップロードしたいと考えています。この仮想ホストでPHPのupload_max_filesize
とpost_max_size
の設定をグローバルに調整できますが、サービス拒否攻撃が必要以上に簡単になるのではないかと心配しています。
理論的には、これら2つの設定はディレクトリごとに(仮想ホスト構成ファイルまたは.htaccessファイルを介して)調整でき、管理領域でより大きな値のみが必要です。残念ながら、このアプリケーションのWebルート(単一のエントリポイント)にはstart.phpしかなく、他のすべてのPHPファイルはそこから含まれています。これにより、ディレクトリごとの設定が不可能になるようです。 CMSで使用されているパスを<Location>と一致させようとしましたが、正しいパスを使用しても、php_valueディレクティブは効果がありません。
<LocationMatch ^/admin>
php_value upload_max_filesize 100MB
php_value post_max_size 100MB
</LocationMatch>
(mod_rewriteは、/admin/content/bla
のようなパスを/start.php?_p=/admin/content/bla
に変換するために使用されます。そのため、「start.php」ファイル名は上記の式に表示されません。)
これを機能させる方法はありますか?また、別の提案も受け付けています。たとえば、私たちの場合、IPベースのセットアップが可能かもしれません。
TIA。
Apacheはこれを行うことができないようです。ただし、Apacheまたはphp-fpmの制限をグローバルに高く設定し、proxy_passまたはfastcgi_passでnginxを使用し、別々の場所でnginxclient_max_body_sizeディレクティブを使用してURLごとの制限を設定できます。
location / {
client_max_body_size 1M;
try_files NOT_EXISTS @proxy;
}
location = /upload.php {
client_max_body_size 100M;
try_files NOT_EXISTS @proxy;
}
location @proxy {
proxy_pass http://localhost:9000/; #Apache listening on port 9000;
# other proxy directives may be needed, e.g. to set Host headers
}