強く型付けされたビューにTextAreaがあります。
@Html.TextAreaFor(x => x.Text)
私のコントローラーアクションは元々次のように見えました:
[HttpPost]
public ViewResult Index(MyViewModel vm)
{
using (var db = new MyEntities())
{
Post p = new Post();
p.Text = vm.Text;
db.Posts.AddObject(p);
db.SaveChanges();
}
return View();
}
これはうまくいきました。ユーザーがTextAreaに入力したテキストはコントローラーに渡され、EntityFrameworkを介してSQLServerのPostテーブルに保存されました。このフィールドのデータ型はvarchar(1000)です。([StringLength(1000)]検証でMetadataTypeを使用するTextフィールドのモデル検証もあります。)
HTMLソースをコピーしてTextAreaに貼り付けて送信しようとすると、次のエラーが発生することに気付きました。
「潜在的に危険なRequest.Form値がクライアントから検出されました」
エラーは私をこの質問に導きました、そしてそこからの持ち帰りは私が単に追加することができるということでした
[HttpPost, ValidateInput(false)]
そのタイプの検証を停止するための私のアクションに。これは素晴らしく機能しましたが、驚いたことに、TextAreaに何を入れようとしても、問題は発生しませんでした。引用符で囲まれたjavascript、html、またはT-SQLステートメントを貼り付けても、正常に機能します。TextAreaに入力した正確な文字がSQLテーブルに表示され、テキストをビューに戻すと、ソースで各文字が対応するHTMLに変換され、画面の表示は次のようになります。私がそれを入力したとき、それはしました。私はこれを達成するためにどんな種類のテキスト変換もしませんでした。デフォルトでは、すべてが希望どおりに機能しているようです。もちろん、私はこれを喜んでいますが、検証を無効にすることについて読んだとき、これを行うことの結果を理解する必要があるという警告が続くことがよくあります、そして、私はそうは思わない。だから私は、結果はどうなるのだろうか?入力検証を無効にした結果として物事を台無しにする可能性のある誰かが私のTextAreaに入力する可能性があるものはありますか?
関連する場合、私の特定のセットアップはMVC4、.NET 4.0、Entity Framework 4.4、SQL Server2012Expressです。