0

我将控制器操作中的 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>并再次打开站点以查看结果时,我看到:<script>alert(“Boo!”)</script>

我怎样才能解决这个问题?

注意:我没有在我的代码中的其他地方对输入进行编码。

4

2 回答 2

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

于 2013-04-09T07:48:00.273 回答
0

如果您想查看<而不是&lt;,请使用 HttpUtility.HtmlDecode

如果您将用户输入保存在数据库中并希望他们允许输入 html,请在存储到数据库之前在您的控制器中对他们的输入进行编码:

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

当您想要显示该输入时,请在您的视图中解码:

@HttpUtility.HtmlDecode(model.Input)

并且不要将 ValidateInputAttribute 设置为 false,而是在模型中为 Input 属性使用 [AllowHtml] 属性:

[Required]
[AllowHtml]
public string Input {get; set;}
于 2013-04-09T07:54:53.597 回答