5

フォームにHTML文字を入力すると、ここで<br />説明するように、ASP.NETは内部500例外をスローします。

A potentially dangerous Request.Form value was detected from the client (Name="<br />").

さて、悪意のある理由で使用される可能性のあるエンコードされていない文字から私を保護しています。

問題は、そしてこれは私の長い検索のどこにも答えられていないということです、それについて何をすべきかです。つまり、ユーザーが不正な文字を入力したときに、アプリケーションが一般的な内部サーバーエラーをスローするだけではいけません(<-などの矢印を描画している場合はどうなりますか)。

ModelState「HTML文字を使用しないでください」などのエラーが表示されたページに戻るだけの方がよいでしょう。

しかし、これはどのように達成されるのでしょうか?エラーは私のコードに到達する前にスローされます。また、経由でオフにしてからvalidateRequest="false"、アプリケーション内のすべてのフォームのHTML文字を検証して、エラーを返す必要はありません。

このタイプの検証を有効のままにして、別の方法で処理する方法はありますか?

明確化のためのコード:

Model

Public Class SomeModel
    Public Property SomeField As String
End Class

Controller

<HttpPost>
Function SomeController(ByVal model As SomeModel)
    ' model.SomeField contains some HTML characters :O
    ' but it doesn't matter, since an internal error has occured :(
End Function
4

4 に答える 4

3

ビューモデルのプロパティにAllowHtml属性を追加してみましたか?

于 2013-03-12T05:03:01.283 に答える
2

適切と思われるメッセージを使用して、独自のエラーページを表示することは間違いなく可能です。
これにはcustomErrorページを使用します。

これらのエラーページは、適切なエラーコードに対して表示されるように構成できます。

<configuration>
   <system.web>
      <customErrors mode="RemoteOnly" redirectMode="ResponseRewrite" 
                    defaultRedirect="GenericError.htm">
         <error statusCode="500" redirect="InternalError.aspx"/>
      </customErrors>
   </system.web>
</configuration>

カスタムエラーページの表示

この場合のhtmlデータを別の方法で処理する場合は、エラーページで最後のエラーを検出しServer.GetLastError()、適切なメッセージを表示するために使用できます。

于 2013-03-12T05:19:50.860 に答える
1

あなたが望んでいるのは、それをグローバルにオフにすることのようです。

アプリケーションのすべての入力を検証する必要があるという懸念は、かみそりと<%:%>asp.netWebページ構文の両方で自動的にHTMLエンコード出力を行う場合よりも問題が少なくなります。HTMLが含まれていないことを確認するために手動で検証する必要があるアプリケーションの唯一のフィールドは、エンコードされていない生のテキストとして表示されるフィールドです。

于 2013-03-12T20:01:37.243 に答える
0

モデルへの制限付き入力を許可するには、モデルプロパティでAllowHtmlAttributeを使用します。それが最初のステップです。

次に、カスタムバリデーターを作成するか、RegularExpressionAttributeを使用して仕様への入力を検証します。

または、ユーザーが制限された文字を入力できるようにする場合は、HttpUtility.HtmlEncodeを使用して値をエンコードします。

于 2013-03-12T05:23:55.853 に答える