問題
- multipart/form-data と適切なサイズの添付ファイルを指定した POST リクエストで、ファイルを一時ディスクフォルダにダウンロードします。
- アンチウィルスエージェントは、同様のPOSTリクエストの後、フォルダ内の悪意のあるファイル(複数可)を検出する場合があります。
Environment
- Liferay DXP 7.0+
解決策
- マルチパートの苦労は、サーバーがリクエストを全文読み込むまで中身がわからないことです。
- つまり、ポータルはリクエストを捨てることができない。メモリに対するDoSを避けるため、リクエストは一時的にディスクに保存される。
- 例:
portletId
はリクエストの最後のものです。この場合、DXPはマルチパートボディの最後の最後まで、リクエストがどのポートレット/アクションをターゲットにしているかわかりません。
追加情報
- リクエストのサイズが大きすぎる場合、ディスクに保存されます: https://github.com/liferay/liferay-portal/blob/master/portal-impl/src/com/liferay/portal/upload/LiferayInputStream.java#L74-L76
- また、リクエストの最大サイズに制限を設けることで、以下のように制御しています: https://github.com/liferay/liferay-portal/blob/master/portal-impl/src/com/liferay/portal/upload/UploadServletRequestImpl.java#L118
- この動作は、Liferayという製品ではなく、tomcat特有のものです。ここでは、tomcat の /temp/ フォルダについて簡単に説明します:
Tomcatのtempディレクトリは、コンパイルされたJSPページ、セッションデータ、アップロードされたファイルなど、Tomcatが実行中に生成する一時ファイルを保存するために使用されます。 これらのファイルは、Tomcatがシャットダウンされると自動的に削除されます。 The location of the temp directory can be configured in Tomcat's server.xml configuration file using the "tempdir" attribute of the <Host> element.
会員限定記事
Liferay エンタープライズ サブスクリプションをお持ちのお客様は1500件を超えるベストプラクティス、トラブルシューティング、その他のソリューション記事を閲覧できます。ログインすると、記事全体をお読みいただけます。
ログイン