我知道&lt;%:是html.encode的事情,但是当我确定我不需要编码时有很多情况,那么我为什么要浪费时间来编码我所做的事情呢? 100%确定它不需要编码,例如<%:Url.Action("Index") %>
或<%: Model.Id %>
(类型为int)?
答案 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;%:”作为团队发展指南。为了安全起见。