我将控制器操作中的ValidateInputAttribute设置为false。在我看来,我有一个文本框:
<p>
<%= Html.TextBoxFor(m => m.Name.LastName, new { maxlength = "100" })%>
<%= Html.ValidationMessageFor(m => m.Name.LastName) %>
<%= Html.Hidden("hiddenLastName", Model.Name.LastName) %>
</p>
现在我可以保存文本框中的所有内容,但在显示数据时,我会看到奇怪的字符。因此,当我保存<script>alert(“Boo!”)</script>
并再次打开网站以查看结果时,我会看到:&lt; script&gt; alert(“Boo!”)&lt; / script&gt;
我该如何解决这个问题?
注意:我没有在我的代码中的其他地方对输入进行编码。
答案 0 :(得分:0)
它是编码的字符串。如果脚本标记可以攻击您的站点,那么这个转换为Html编码字符串的字符串是安全的。但是如果要显示带有标记元素的未编码字符串,请使用HtmlString。
HtmlString htmlString = new HtmlString("rawString");
String encodedString = htmlString.ToHtmlString();
String not_encodedString = htmlString.ToString();
这里是msdn链接: http://msdn.microsoft.com/en-us/library/system.web.htmlstring.aspx
答案 1 :(得分:0)
如果您想要<
而不是<
,请使用
HttpUtility.HtmlDecode
如果您要在数据库中保存用户输入并希望它们允许输入html,请在存储到数据库中之前在控制器中对其输入进行编码:
model.Input = HttpUtility.HtmlEncode(model.Input);
如果您想显示该输入,请在视图中解码:
@HttpUtility.HtmlDecode(model.Input)
而不是将ValidateInputAttribute设置为false,在模型中对Input属性使用[AllowHtml]属性:
[Required]
[AllowHtml]
public string Input {get; set;}