2016-04-29 5 views
2

ウェブサービスの「セキュリティ対策」の1つが、大きなファイルのアップロードをブロックしています。
大きすぎるファイルが送信されたときにできるだけ早くファイルのアップロード要求を取り消したいと思います。WebサービスでPOSTリクエストを放棄する最も早い瞬間ですか?

ファイルのアップロードとの要求が、とにかく最大のものであることを行っているので、私は現在TWebModuleBeforeDispatchハンドラにこのコードを持っている:

procedure TWebModuleWebServices.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); 
begin 
    // Request that are too large are going to be dropped silently: 
    if Request.ContentLength > cMaxContentSize then 
    begin 
     Handled := true; 
     Exit; 
    end; 

のための可能な限り早い段階BeforeDispatchハンドラですこのテスト、またはより良い場所がありますか?

は、WebサービスがTIdHTTPWebBrokerBridgeを中心に構築されたインディで

答えて

1

(= class(TIdCustomHTTPServer)IdHTTPWebBrokerBridge.pasを参照してください)ポストデータ・ストリームがすでにTIdCustomHttpServer.DoExecuteで取得されたとして、TCustomWebDispatcher.BeforeDispatchイベントが遅すぎます。​​をFalseに設定することで、以前に起動されたTIdCustomHTTPServer.OnHeadersAvailableイベントを回避できます。

+1

'OnHeadersAvailable'が' VContinue = False'を設定すると、 'TIdCustomHTTPServer.OnHeadersBlocked'イベントを使ってクライアントに送り返されるレスポンスをカスタマイズすることができます。デフォルトでは、 '403 Forbidden'レスポンスが送信されます。この場合、 '413 Payload Too Large'がより適切でしょう。 –

関連する問題