我应该总是使用<%:而不是<%=

时间:2010-07-20 09:35:04

标签: asp.net-mvc asp.net-mvc-2

我知道&lt;%:是html.encode的事情,但是当我确定我不需要编码时有很多情况,那么我为什么要浪费时间来编码我所做的事情呢? 100%确定它不需要编码,例如<%:Url.Action("Index") %><%: Model.Id %>(类型为int)?

6 个答案:

答案 0 :(得分:8)

:代码块是ASP.NET 4.0 Web编译器的一部分,不只是调用Html.Encode()。它确定字符串是否已经先编码(如果表达式返回IHtmlString,那么它可能不会被编码)。

这意味着在插入实际数据或从某种类型的辅助方法插入HTML时使用它是安全的(如果编写自己的辅助方法,它们应始终从MVC 2返回IHtmlString)。 / p>

关于你是否总是使用它,你当然不会。但是我宁愿不去想太多,并且会更加高兴知道我已经走了一些路,以轻而易举的方式抵御XSS攻击;因此,我几乎总是使用它。

它还鼓励您确保从HTML帮助程序方法而不是MvcHtmlString返回string

答案 1 :(得分:4)

想要使用&lt;%:的一个示例是来自资源文件的包含HTML转义字符的字符串。我不认为你可以做一个全面的陈述,你总是使用&lt;%:。

答案 2 :(得分:3)

我个人只将它用于我知道需要编码的东西。不需要将它用于整数类型<%: Model.Id %>,但这只是个人偏好。

答案 3 :(得分:1)

<%: model %>相当于<%= Html.Encode(model)%>

使用<%:可以节省击键次数并提高工作效率,

但有时您需要<%=(不要对页面上显示的内容进行编码)

答案 4 :(得分:0)

对HTML进行编码的一个优点是它根据相应的数据类型使页面W3C有效。那么为什么要首先验证文档呢?

要获得答案,请检查:http://validator.w3.org/docs/why.html

简单验证HTML可以在开发周期的后期节省大量时间,这是一个很好的做法。

答案 5 :(得分:0)

如果只使用一种类型,它会更简单,并使代码更干净。 另外,你永远不会知道,谁会改变代码,并且做出一个简单的“100%”陈述,一个不那么100%的陈述: - )

通常情况下,在网络环境中,这些事情的表现不是问题。

我建议只使用“&lt;%:”作为团队发展指南。为了安全起见。