2

私の ASP.NET MVC 5 アプリでは、フォームからいくつかのデータを読み取り、バックエンドでアクション メソッドへの jQuery ajax 呼び出しを行って、それをデータベースに保存しています。

フォームに HTML タグを含むテキストを入力すると、HTML タグが原因でエラーが発生します。標準の「...潜在的に危険な...」エラーが表示されます。

GetSafeHtmlFragment() を使用してバックエンドでデータをサニタイズしていますが、データがアクション メソッドに到達するとすぐにエラーが生成されます。

jquery ajax 呼び出しなどのクライアント側スクリプトからアクション メソッドにデータを送信する正しい方法は何ですか? 最初に、たとえば JS イベント ハンドラーでデータを HTML エンコードしてから、アクション メソッドに送信しますか?

4

1 に答える 1

1

それがクライアント側スクリプト (XHR) であるか直接の HTTP 要求であるかは関係ありません。ASP.Net ランタイムはRequest Validationを使用して要求をブロックします。

MVC では、これは Action メソッドで GetSafeHtmlFragment() に到達する前に発生します。必要なことは、マークアップ付きのデータを期待しているアクション メソッドの Request Validation をオフにすることです。

Request Validation をオフにする方法を細かく制御できます。

  1. マークアップ データがプロパティであるモデル クラスがある場合は、[AllowHtml]属性を使用してそのモデルのプロパティを装飾します。そのため、リクエストの検証はそのプロパティに適用されません。

  2. Action メソッドまたはコントローラー全体のリクエスト検証をオフにする場合[ValidateInput(false)]は、Action メソッドまたはコントローラー自体を使用します。

スタック トレースや詳細がなければ、これが私が思いつく最善の答えです。データとしてマークアップ (潜在的に危険なものを含む) を許可していることを理解している限り、リクエストの検証をオフにすることは悪くありません。

既に GetSafeHtmlFragment() があるため、特定のプロパティまたは Action メソッドの Request Validation をオフにします。また、サニタイザーとしての Microsoft の Antixss ライブラリに関しては、次の点に注意してください。

于 2014-06-19T13:09:08.493 に答える