【发布时间】:2012-08-31 15:01:18
【问题描述】:
所以,我认为我是一名“资深”的 ASP.NET WebForms 开发人员;但是,我最近遇到了这个问题,并且(不愉快地)对输出 没有 转义感到惊讶:
<asp:Label Text='<%# Eval("UserData") %>' runat="server" />
在 Eval 返回 "<h1>joke is on you" 或对页面的正确呈现/安全性更有害的地方进行成像。
直接使用标签而不是<%# %> 的原因是,错误地假定,“UserData”的内容将被正确地转义为 HTML。然而,这显然不是的情况,上述场景导致在 HTML 标记中创建 <h1> 元素。
那么问题可以提炼为:
给定任意用户输入,即显示为“纯文本”,将数据插入页面(在跨度中)并正确转义的简单/可靠/安全方法是什么?
如上所述,它应该在数据绑定控件的上下文中运行。我知道HttpUtility.HtmlEncode,但我希望考虑仍然使用控件的想法 - 也许我错过了这个任务的标准控件 - 安全地表示这个案例,没有需要包装Eval。如果这是基于逻辑或经验的误导,最好将其包含在回复中。我不会否认我在这种情况下使用 Label 是完全不合适的。
不幸的是,由于需要在 SharePoint 2010 上下文中运行,我将 ASP.NET 定位为 .NET 3.5,而不是 ASP.NET 4。
【问题讨论】:
标签: asp.net webforms escaping html-entities