ASP.NET 4.0: 新的的模板语法代码块 <%: %>
2014-08-16 18:37
323 查看
这是用于替代<%=%>而推出的一种新的页面文件输出语法。
在白皮书中指出,一些站点,特别是ASP.NETMVC推出以后,越来越多的开发人员,选择在页面中使用<%=%>来输出字符串文本,而不是使用ServerControl。这样做本身没有任何问题,也会让页面模板更为简洁,但是这样做却有可能带来安全性的问题:如果使用<%=%>输出来自用户的输入的内容,由于<%=%>语法没有进行HTMLEncode处理,而大多数开发人员一般都不太注意自己对输出文本进行HTMLEncode(我就是其中一个),这样就有可能就会带来XSS的安全性问题。因此,在一些需要显示用户输入内容时,不管使用Response.Write,还是使用<%=
%>(事实上<%=%>的效果等同于Response.Write,关于更多的模板语法请参考:http://quickstarts.asp.net/QuickStartv20/aspnet/doc/pages/syntax.aspx),我们的最佳实践应该都是需要先调用一下HttpUtility.HtmlEncode对文本进行一次Html编码,以保证输出安全。这样做还是稍微有一点点的麻烦,于是<%:
%>就出现了。使用<%:%>的效果等同于我们调用了HtmlEncode以后,再使用<%=%>,实际上就是在保证安全的同时提高生产力。
在MVC2中,我们发现HtmlHelper原来返回的字符串,改为返回MvcHtmlString(由于MVC2的程序集并不直接使用ASP.NET4.0,因此它通过动态类的方式来实现IHtmlString接口),就是这个原因,不希望<%:%>对MVC输出的Html标签进行HtmlEncode,否则在ASP.NET4.0可使用<%:%>将无法正常工作。
这里还要提一点,使用这个语法,不完全保证页面的没有XSS漏洞,例如当用户提交的内容中,使用了不带引号的属性值引用Html标签,一样可能会受到影响。另外,这个语法不进行javascript编码。
原文:http://hjf1223.cnblogs.com
在白皮书中指出,一些站点,特别是ASP.NETMVC推出以后,越来越多的开发人员,选择在页面中使用<%=%>来输出字符串文本,而不是使用ServerControl。这样做本身没有任何问题,也会让页面模板更为简洁,但是这样做却有可能带来安全性的问题:如果使用<%=%>输出来自用户的输入的内容,由于<%=%>语法没有进行HTMLEncode处理,而大多数开发人员一般都不太注意自己对输出文本进行HTMLEncode(我就是其中一个),这样就有可能就会带来
%>(事实上<%=%>的效果等同于Response.Write,关于更多的模板语法请参考:
%>就出现了。使用<%:%>的效果等同于我们调用了HtmlEncode以后,再使用<%=%>,实际上就是在保证安全的同时提高生产力。
我们在VS2010中创建的MVC站点,在LogOnUserControl.ascx文件中有这么一段代码:
<%:Html.ActionLink("LogOn","LogOn","Account")%>
它编译的结果如下:
__w.Write(HttpUtility.HtmlEncode(base.Html.ActionLink("LogOn","LogOn","Account")));
这个新的语法原理本身就是这么简单。<%:%>会帮我们进行一次HtmlEncode,但是在一些情况下,我们不希望输出的文本被自动HtmlEncode;或者我们要输出的内容本身已经做过一次HtmlEncode,而且在项目我们希望统一使用<%:%>,那么再使用这个语法将会对文本进行二次编码。在这种情况下,ASP.NET4.0中,还增加了IHtmlString接口,只要你要输出的实例实现了这个接口,HttpUtility.HtmlEncode这个方法将不会对IHtmlString的接口进行Encode,对应的HtmlEncode方法的实现如下:
在ASP.NET4.0,IHtmlString的默认实现是:HtmlString,如下输出代码将不会进行HtmlEncode:
<%:newHtmlString("<strong>HTMLthatisnotencoded</strong>")%>
在MVC2中,我们发现HtmlHelper原来返回的字符串,改为返回MvcHtmlString(由于MVC2的程序集并不直接使用ASP.NET4.0,因此它通过动态类的方式来实现IHtmlString接口),就是这个原因,不希望<%:%>对MVC输出的Html标签进行HtmlEncode,否则在ASP.NET4.0可使用<%:%>将无法正常工作。
这里还要提一点,使用这个语法,不完全保证页面的没有XSS漏洞,例如当用户提交的内容中,使用了不带引号的属性值引用Html标签,一样可能会受到影响。另外,这个语法不进行javascript编码。
原文:
相关文章推荐
- ASP.NET 4.0: 新的的模板语法代码块 <%: %>
- Asp.Net 4.0 新特性 系列 之一 从页面标记<%%>说起
- 精进不休 .NET 4.0 (2) - asp.net 4.0 新特性之url路由, 自定义CacheProvider, 新增的表达式<%: expression %>, QueryExtender控
- 精进不休 .NET 4.0 (2) - asp.net 4.0 新特性之url路由, 自定义CacheProvider, 新增的表达式<%: expression %>, QueryExtender控件, 其它新特性
- Asp.Net 4.0 新特性 系列 之一 从页面标记<%%>说起
- Asp.Net 4.0 新特性 系列 之一 从页面标记<%%>说起
- Asp.Net 4.0 新特性 系列 之一 从页面标记<%%>说起
- <转>ASP.NET MVC HtmlHelper用法大全
- Asp.Net 无限分类生成表格 <后台自定义输出table>
- <ASP.NET>SQL SERVER 默认主键,默认了聚簇索引
- Nop-Fluent+AutoFAC模式在ASP.NET MVC中的应用场景<四>
- Nop-Fluent+AutoFAC模式在ASP.NET MVC中的应用场景<四>
- Asp.Net 4.0 新特性 系列 之一 从页面标记<%%>说起
- ASP.NET4.0新的<%: %>语法用于HTML Encoding
- ASP.NET中数据绑定语法<%# %>
- Asp.Net中几种相似的标记符号: <%=...%>< %#...%>< %%>< %@ %>解释及用法
- 控件包含代码块(即 <% ... %>),因此无法修改控件集合 asp.net
- Nop-ASP.NET MVC Area概念的应用Admin后台项目<三>
- asp.net 字符替换 <: &lt; >: &gt; &: &amp;
- Asp.Net前台页面中有几种标记: < %= %>< %# %>< % %>< %@ %>