Bind()或Eval()会自动使用HtmlEncode来防范XSS吗?

Dav*_*vid 14 asp.net data-binding xss

如果这是一个愚蠢的问题,请原谅我.我未能找到明确说明的答案.

我很少在我的aspx页面中使用Bind()或Eval(),而是使用以下语法:(假设这是在Repeater控件中的ItemTemplate中)

<asp:Label id="lblFirstName" runat="server" Text='<%# Microsoft.Security.Application.AntiXss.HtmlEncode(DataBinder.Eval(Container.DataItem, "FirstName").ToString()) %>
Run Code Online (Sandbox Code Playgroud)

我很久以前就开始这么做了,根本就没有质疑它,但现在我发现这可能是矫枉过正的.现在我正在使用一个在整个地方都使用这种语法的CMS:

<asp:Label id="lblFirstName" runat="server" Text='<%# Bind("FirstName") %>
Run Code Online (Sandbox Code Playgroud)

所以我想知道,基本上,如果我使用Bind()或Eval()运行时自动HtmlEncode输出?我一直在做不必要的编码吗?

Mit*_*ers 19

Bind()和Eval()不做任何事情来阻止那种类型的事情并且不进行编码.<%# %>样式代码块也没有.

但是,如果您使用的是ASP.NET 4及更高版本,则可以使用<%: %>Blocks来处理响应写入类型情况和<%#: %>数据绑定情况.

斯科特格思里有一篇很棒的文章.