2

ページにコメントの HTML を生成するヘルパー メソッドを作成しています。内容として "< script >alert("hello");< /script >" を含むコメントを表示できるようにしたいと考えています。

使用時

@HttpUtility.HtmlDecode(comment.Content)

*.cshtml ファイルでは、そのスクリプトはプレーン テキストとしてレンダリングされます。

ただし、ビューでこの HTML ヘルパーを使用する場合:

@Html.PendingComment(comment)

スクリプトは HTML としてレンダリングされ、実行されます。

public static IHtmlString PendingComment(this HtmlHelper helper, VoidCommentPending comment)
    {
        var sb = new StringBuilder();
        sb.Append("<p>" + HttpUtility.HtmlDecode(comment.Content) + "</p>");
        return MvcHtmlString.Create(sb.ToString());
    }

「new HtmlString()」で試してみましたが、結果は同じで、戻り値を IHtmlString から文字列に変更すると、段落タグでさえプレーンテキストとしてレンダリングされました。

HtmlHelper で HTML 文字列のエンコードとデコードを混在させることは可能ですか、それとも別のアプローチを使用する必要がありますか?

4

1 に答える 1

4

さて、コメントをデータベースに保存する前に、HttpUtility.Encode を使用します。

model.Content= HttpUtility.HtmlEncode(model.Content);

次に、ヘルパー メソッドからデコードを削除しました

sb.Append("<p>" + comment.Content + "</p>");

そして、「< script >alert("hello");< /script >」が私のページにプレーンテキストとして表示されます。問題が解決しました。

基本的に、私は「二重解読」でした。HttpUtility.HtmlDecode を使用して、このコンテンツ:

&lt;script&gt;alert(&quot;hello&quot;);&lt;/script&gt;

私が望んでいた「プレーンテキスト」htmlにデコードされていましたが、MvcHtmlString.Createが再びデコードされ、HTMLとしてレンダリングされました。

于 2013-04-02T13:45:34.470 に答える