5

wsgi アプリでファイルのアップロードを安全に処理する最善の方法を理解しようとしています。多くのソリューションでは、cgi モジュールの FieldStorage を使用してフォーム データを解析する必要があるようです。FieldStorage について私が理解していることから、一時ファイルにデータをストリーミングすることにより、舞台裏で少し「魔法」を実行します。

私が 100% はっきりしていないのは、指定された量 (たとえば 10MB) を超えるファイルを含むリクエストを制限する方法です。誰かが数GBのサイズのファイルをアップロードした場合、サーバーのディスク容量を食い尽くす前にリクエストをブロックしたいのは明らかですよね?

wsgi アプリケーションでファイルのアップロードを制限する最良の方法は何ですか?

4

2 に答える 2

3

フロントエンド サーバーによって異なります。アプリに入る前でも大きなリクエストをブロックする構成がある場合は、それを使用してください。

コードでこれをブロックしたい場合は、次の 2 つの方法があります。

  • Content-Length HTTP ヘッダーを見てください。処理できないほど大きい場合は、すぐにリクエストを拒否してください。
  • 制限に達するまで、ヘッダーを信頼せずにリクエスト本文の読み取りを開始してください。これはあまり賢い方法ではありませんが、うまくいく可能性があることに注意してください。=)

HTTP ヘッダーを信頼すると、問題が発生する可能性があります。誰かが Content-Length: 1024 のリクエストを送信したが、1GB のリクエストボディを送信したとします。フロントエンド サーバーがヘッダーを信頼している場合、このリクエストの読み取りを開始し、後でリクエストの本文が本来よりもはるかに大きいことがわかります。この状況は、「大きすぎるチェック」を「パス」するリクエストであっても、サーバーのディスクがいっぱいになる可能性があります。

これが起こる可能性はありますが、ヘッダーを信頼することは良い出発点になると思います.

于 2012-01-23T17:14:40.473 に答える
0

おそらく WSGI アプリケーションの前にある HTTP サーバーの機能を使用できます。たとえば、lighttpd には、トラフィック シェーピングのための多くのオプションがあります。

于 2012-01-23T11:15:31.100 に答える