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

时间:2013-03-26 15:56:23

标签: 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()) %>

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

<asp:Label id="lblFirstName" runat="server" Text='<%# Bind("FirstName") %>

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

1 个答案:

答案 0 :(得分:19)

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

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

Scott Guthrie对此有一个很棒的post