3

URL で「特殊」文字 (&、+、% など) を取得する必要があるアプリケーションがあります。これらの文字を使用してアプリケーションにリクエストを送信すると (もちろんエスケープして送信しています)、「ASP.NET が URL に無効な文字を検出しました」というメッセージとともに「Bad Request」応答コードを受け取ります。リクエストをトレースすると、「認証モジュール」からエラーがスローされたことがわかりました。

少し検索したところ、すべてのページに ValidateRequest があり、その値を false に変更すると問題が解決することがわかりました。残念ながら、私は Httphandler を使用しています。httpハンドラーを使用してリクエストの検証を停止する方法を知っている人はいますか?

4

8 に答える 8

2

アプリケーションまたはマシンレベルでの大規模な変更は、私には受け入れられませんでした。スクラブする必要がある、クライアントが誤って送信していたパラメーターが1つだけありました。

クエリ文字列内のhtmlまたはその他の潜在的に危険な項目を使用してリクエストが行われる場合、を使用して文字列をスクラブでき、クエリ文字列がスクラブされたら、を使用できることがわかりましcontext.Request.RawUrlcontext.RewritePath(scrubbedUrl)

  1. ハンドラーの最初のものは、context.Request.RawUrl
  2. 不正な入力の不正なリクエストRawUrlをスクラブします
  3. context.RewritePath(srubbedUrl)
  4. 利益

リクエストの検証はアクセスのみを考慮してcontext.Request.Params[]いるようです。そのため、Paramsコレクションにアクセスする前にパスを(同じパスに)スクラブして書き換えると、ゴールデンになります。

于 2011-10-13T15:37:55.350 に答える
2

同じ問題が発生しました(URLに特殊文字を含むリクエストを受信する必要があるIHttpHandlerを作成しました)。私はそれを修正するために2つのことをしなければなりませんでした:

  1. 値が1の次のDWORD登録エントリを作成します。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\VerificationCompatibility

  2. web.configで、requestFiltering要素のallowDoubleEscaping属性をtrueに設定します。

于 2009-01-28T01:28:20.003 に答える
2

私は同じ問題を抱えていて、以下のように、validateRequest="false" と requestValidationMode="2.0" を設定することで機能しました。レジストリの編集はありません。

<system.web>
  <httpRuntime requestValidationMode="2.0" />
  ...
  <pages ... validateRequest="false" />
</system.web>
于 2010-06-23T09:40:18.133 に答える
1

以下の解決策は私にとってはうまくいきました-値が1の次のDWORD登録エントリを作成します。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\VerificationCompatibility

で、要素の属性をweb.configに設定します。allowDoubleEscapingrequestFilteringtrue

于 2010-05-04T11:06:07.127 に答える
0

ですべてのモジュールを削除できます

<httpModules>
  <clear />
</httpModule>

リクエストがハンドラーに届くようにします。または、リクエストを停止している特定のモジュールを削除することもできます。

これは、ここから ASP.NET 2.0 にデフォルトでロードされるモジュールのリストです。

<httpModules>
     <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />
     <add name="Session" type="System.Web.SessionState.SessionStateModule" />
     <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
     <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" />
     <add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
     <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" />
     <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />
     <add name="Profile" type="System.Web.Profile.ProfileModule" />
</httpModules>
于 2008-11-13T15:43:51.400 に答える
0

これはどう?

<system.web>
    <pages validateRequest="false">
    </pages>
</system.web>
于 2008-11-19T03:59:14.440 に答える
-1

web.config のページ セクションで、validateRequest を false に設定できます。多分それは HttpHandlers でも機能しますか?

于 2008-11-13T14:34:44.333 に答える