フォームに「説明」フィールドがあります。ユーザーがこのフィールドで特殊文字を使用することを制限されないようにしたいと思います。
そのため、次のデータをクライアントからサーバーにPOSTし、データベースに保存して、再度正しくレンダリングできるようにしたいと思います。
テストの説明( &&%$ ^ & ^()^ && $& 87566467679089765?<>?<>?<>?<> ":";';';'] [] [] [] [{} {} {}
私はこのテーマについていくつか読んだのですが、予想よりも多くの選択肢があるようです。セキュリティのために、これを適切に行うようにしたいと思います。
私のモデルでは、DescriptionプロパティにAllowHtml属性のタグを付けました。
[DisplayFormat(ConvertEmptyStringToNull = false), AllowHtml]
public string Description { get; set; }
これにより、上記のデータをコントローラーにPOSTできますが、問題の核心には対処していません。私は今、自分の入力をサニタイズする必要があると信じています。これは、HttpUtilityライブラリを活用する必要があることを意味すると思います。
HttpUtilityを見ると、たくさんのメソッドがあります。
- HtmlAttributeEncode
- HtmlEncode
- UrlEncode
この投稿によると、HtmlEncodeとUrlEncodeの間に大きな違いはないようです。
私はいくつかのことを疑問に思っています:
- ここでは、HttpUtilityを使用するのが正しい選択ですか?
- POSTする前に入力の処理を行わなくても問題ありませんか?(すべてのエンコーディングをサーバー側で実行できますか?)
- HttpUtilityの代わりにMicrosoftのanti-xssライブラリを使用する必要がありますか?
そして、一般的に、私がプライバシーを守られなかったかもしれない他の落とし穴。
アップデート:
これが私のモデルです:
<div class="detailsRow optional">
<%= Html.LabelFor(model => model.Description, new { @class = "descriptionLabel" }, Model.DescriptionLabel)%>
<%= Html.TextAreaFor(model=> model.Description) %>
</div>
と私のコントローラーメソッド:
public ActionResult SaveNewOrderDetails(NewOrderDetailsModel orderDetailsModel)
{
string description = orderDetailsModel.Description;
//Successfully got description
//Example code:
Order order = new Order(description);
order.Save();
return Json(new { id = order.ID, name = order.Name });
}
コードが「returnJson」ステートメントを通過した後、別のエラーが表示されます。
潜在的に危険なRequest.Form値がクライアントから検出されました(Description = "...>?<>?<>?<> <?>": ";';';'] [] [][][。 .. ")。
私の理解では、これは発生してはならないということです。チェックすべき場所はありますか?
UPDATE2 :AllowHtmlを機能させることができません。MVC4にアップグレードするときに、これを再検討します。