我们应该为HtmlString使用编码吗?

4

ASP.NET MVC有哪些优势

<%= Html.LabelForModel() %>

或者

<%: Html.LabelForModel() %>

? 为什么?


可能是重复的问题:查看模板代码标签 - ASP.NET MVC - 注册。 - Kirk Woll
2个回答

5
如果返回MvcHtmlString,那么它不会有影响;<%:会知道它是预转义的。因此,我建议使用<%:,这样代码审查者就不需要思考“这个是否已经转义?或者这是一个原始字段?”。
当然,这取决于创建MvcHtmlString的代码是否合理...

这不是一个好的论点。为什么我们不像这样编写代码:int count = 10; int price = 100; int cost = (int)price * (int)count;?它看起来像<%= Html.Encode(Html.LabelForModel())%>或<%: Html.LabelForModel() %>。 - Dmitry Borovsky
2
@Dmitry,我不理解这个评论,但是如果我看到<%:obj.LabelForModel()%>,在那一层我就不需要担心LabelForModel是否意味着返回HTML或未转义的字符串。但是对于<%=obj.LabelForModel%>,我确实需要知道。这就是我试图表达的观点。 - Marc Gravell
我试图表达的是,如果你担心编码非转义字符串,那么尝试编码所有内容并不是一个好方法。 - Dmitry Borovsky
2
@Dmitry,你应该担心编码未编码的字符串,而不是试图对所有内容进行编码。第二次,我只是不理解这个评论。 - Marc Gravell
我完全同意我们应该编码常规字符串以排除 XSS。但当我看到在必需的 HTML 标记中使用编码方法时...这非常像微软风格,命名一个不在某些上下文中进行编码的方法名为 Encode。 - Dmitry Borovsky

0

并没有哪一个是“更好”的。它们都输出相同的标记。


当两个方法做同样的事情时,我们应该使用哪一个?第一个还是第二个?或者时而用第一个,时而用第二个?)) - Dmitry Borovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接