ASP.NETMVC2.0でこれを使用できるようになりました <%: Model.CustomerName %>
では、HTMLヘルパーを作成するときは、この方法を使用する方がよいでしょうか(HTMLエンコードを実行したくない場合)。
ASP.NETMVC2.0でこれを使用できるようになりました <%: Model.CustomerName %>
では、HTMLヘルパーを作成するときは、この方法を使用する方がよいでしょうか(HTMLエンコードを実行したくない場合)。
<%: %>
ウェブページをより安全にするために、ユーザーが入力/送信したデータを表示するときはいつでも使用する必要があります。
しかし、すべてを HTML エンコードするのは現実的ではない場合もあります。HTML フォーマットを保持したい場合はどうすればよいでしょうか。この場合、通常の<%= %>
ステートメントを使用する必要があります。これが当てはまる例を考えてみましょう。
ユーザーがコメントを送信できる Web コンテンツがあるとします。いくつかのフォーマット (少なくとも改行)を保持する機能を提供したいと考えています。この場合<br/>
、後でこれらのコメントを表示するときに要素を保持する必要があります。次の 2 つの選択肢があります。
<br/>
. このコメントを表示したい場合は、呼び出すことができます<%= Comment %>
<%= Html.Encode(Comment).Replace("\n", "<br/>") %>
どちらが優れている/安全であるかは、それぞれのケースによって異なりますが、HTML タグをクリーンアップすることは、常に 2 つのいずれかに含めることをお勧めします。すべては、許可されたフォーマット定義にも依存します。それらを通常のタグとして入力するか、マークダウンに似たものにするか、まったく異なるものにするかは、あなた次第であり、最終的なコードは間違いなくそれに依存します。
<%: Model.CustomerName %>
はい、いつでも使えるところはこれからも使いたいですよね。非常に特殊な場合にのみ使用する必要があります<%= %>
が、まったく使用しないようにしてください。
エンコードしたくない独自の html ヘルパーを作成している場合はMvcHtmlString
、それらから a を返すだけです。
たとえば、これは、渡された値が true の場合に目盛りアイコンを表示するために作成した拡張メソッドです。
public static MvcHtmlString MECross(this HtmlHelper html, string value, string text)
{
if (Convert.ToBoolean(value))
{
string spanTag = string.Format("<span class=\"replace icon-cross\" title=\"{0}\"><em></em>{1}</span>",
html.AttributeEncode(text),
html.Encode(text));
return MvcHtmlString.Create(spanTag);
}
return MvcHtmlString.Empty;
}
Encode
IおよびAttributeEncode
拡張メソッドで危険な可能性があるものはすべて、 を返すことに注意してくださいMvcHtmlString
。
HTH、
Chares