3

ASP.NET v2.0 を使用して IIS6 で実行されているサイト用に作成した汎用 http ハンドラーに問題があります。ハンドラーの仕事は、サードパーティのサイトからの投稿を受け入れ、データの翻訳を行い、投稿を介して別のサイトに転送することです。これはすべてうまくいきます。私が抱えている問題は、ハンドラーへの POST の一部が失敗し、次のメッセージが表示されることです。

2013-11-03 00:22:39 Message: A potentially dangerous Request.Form value was 
detected from the client (data.xml="<?xml version='1.0'?...")

このサードパーティ サイトがハンドラーに対して行うすべての投稿には、2 つの形式のデータが含まれます。data.json には json 形式のデータが含まれ、data.xml には xml 形式のデータが含まれます。なぜサイトがこのようにするのかはわかりません。送信する形式を構成することはできません。常にデータを双方向に送信するだけです。

これは ASP.NET v2 サイトで<httpRuntime requestValidationMode="2.0" />あるため、サポートされていません (これは大規模なサイトであるため、とにかくサイト全体で無効にしたくありません)。また、web.configでこれを使用して検証をオフにしようとしました:

<configuration>
  <deleted details />
  <location path="~/Handlers/PostTranslator.ashx">
    <system.web>
      <pages validateRequest="false" />
    </system.web>
  </location>
  <deleted details />
</configuration>

上記の変更は違いを生むようには見えませんでした。

私が逃した Request.Form 検証をオフにする明確な方法はありますか? または、これは一般的な http ハンドラーであるため、何らかの制限がありますか?

エラーをスローするコードは単純です。

public void ProcessRequest(HttpContext context) {
    var form = context.Request.Form;
}

ハンドラーは、次のように web.config に登録されます (重要な場合)。

<add verb="*" path="PostTranslator.ashx" 
      type="My.Web.UI.Site.Handlers.PostTranslator, My.Web.UI.Site" />

実行時の出力は次のaspnet_regiis -lkとおりです(64ビットとして実行):

W3SVC/9755868907/root    2.0.50727.0

この http ハンドラだけのフォーム検証をオフにする方法はありますか?

4

0 に答える 0