2017-05-19 5 views
-3

私は剃刀htmlヘルパー/モデルを利用していないシンプルなウェブフォームを持っていると言います。私は剃刀のHTMLヘルパーを利用していないとき、私の入力が検証されないのはなぜですか?

<form id="survey-form" action="@Url.Action("Submit", "Questionnaire")" method="post"> 
    <textarea name="1" form="survey-form"> 
</form> 

上記のフォームは私のテキスト入力にコントローラ

[HttpPost] 
[ValidateAntiForgeryToken] 
[ValidateInput(true)] 
public ActionResult Submit() 
{ 
    NameValueCollection nvc = Request.Form; 
    return View(); 
} 

<script>alert("xss!")</script>で次の試験方法への投稿は、コントローラによって検証されません

$("#survey-form").submit(); 

使用して送信されます。私は通常、"A potentially dangerous Request.Form was detected from the client ..."例外がスローされることを期待しています。

このメソッドは例外やメッセージを返さず、実行が許可されます。

MSDNドキュメントは

のHttpRequestクラスは、クッキーを介してアクセス要求コレクションに対して検証を実行するかどうかを追跡するために、フォームを入力検証フラグを使用し、QueryStringの特性。言います

ポストされたフォームを潜在的に危険な値で掲示して処理しているので、私の入力を検証することが期待されます。

ASP.NET MVC規約を使用せずにユーザー入力を検証するために、ValidateInput属性のような単純なMVCヘルパーを引き続き使用できますか? (例えば、面倒なhtmlヘルパーやモデルなどを使ってフォームを作成する)

編集: 値が実際にコントローラ上の自分のアクションに到達するという混乱があるように見えるので、値は次のように示すスクリーンショットです関数に到達する。 enter image description here

+0

入力に名前属性がないため、その値は転記されません。 –

+0

@StephenMuecke投稿した例は簡潔にするために非常に短縮版です。提案していただきありがとうございます。私の実際のプロジェクトでは、値が渡され、プロパティをNameValueCollectionに読み込むときにローカルのウィンドウで値を見つけることができます。しかし、検証はありません。 –

+0

あなたの実際のコードを表示してください! –

答えて

2

Submit ActionResultの引数としてFormCollectionを指定する必要があります。

+0

Hi Majdiを追加した場合はスローされてしまいます)。私はあなたが示唆したように、入力はまだ私は恐れている検証されていませんでした。 –

+0

Foo ActionResultに引数がないため、入力フィールドにname属性がないため、データはコントローラに送信されません。 –

+0

更新された提案をお試しください。 –

関連する問題