2017-01-24 17 views
0

私は、ユーザーの要求ごとにフォームとクエリ文字列データをデータベースにシリアル化して保存しています。この特定のサブミットされたモデルは既に[AllowHtml]属性を持ち、コントローラに正常に送信します。問題は、私はこのフォームの値にアクセスするとき、私は例外を取得、私は要求をログGlobal.asaxファイル内にある:C#ASP.NET MVC Request.Formに手動でアクセスすると危険な値

「潜在的に危険のRequest.Form値が( クライアントから検出されたが... )。 "

protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e) 
{ 
    ... 
    var serializer = new JavaScriptSerializer(); 
    var formData = (Request.Form.Count == 0) ? "" : serializer.Serialize(Request.Form.AllKeys.Where(x => x != null).ToDictionary(k => k, k => Request.Form[k])); 
    ... 
} 

は無効な文字が含まれている場合、それはあるRequest.Form [k]をアクセスしようとするとエラーがスローされます。

+1

テスト済みではありませんが、 'Request.Unvalidated.Form [k]' –

+0

を使用することができます。メソッドに[ValidateInput(false)]を追加してみてください。 – coolboyjules

+0

@StephenMuecke答えとして投稿してください。それは働いている。 – Brad

答えて

1

Request.Form[]で値にアクセスすると、要求の検証が行われます(したがって例外が発生します)。 HttpRequestUnvalidatedプロパティを使用して、検証をトリガーせずに要求値を取得できます。

Request.Unvalidated.Form[k] 

注意して使用して

Request.Form[k] 

置き換え - documentationから:

セキュリティに関するメモ:このプロパティを使用する場合は、手動でのデータをチェックする必要があります潜在的なクロスサイトスクリプティング攻撃。

+0

値をシリアル化してデータベースに格納し、ストアドプロシージャnvarchar(max)paramとして送信すると、クロスサイトスクリプティングのリスクはありますか? – Brad

+0

いいえ(AFAIKではありません)、私はこれを読んでいる他の人の利益のためにもっと多くを加えました(あなたの場合はデータをロギングするだけです) –

関連する問題