asp.net – 转义HTML实体并避免WebForm标签中的HTML注入?
|
所以,我以为我是一个“资深的”ASP.NET WebForms开发人员;但是,我最近遇到了这个问题并且(令人不快地)惊讶于输出没有被转义: <asp:Label Text='<%# Eval("UserData") %>' runat="server" />
Eval返回“< h1>笑话在你身上”的成像,或者对页面的正确呈现/安全性更恶意的事物. 有一个标签而不是<%#%>的原因直接是这样,正如错误推测的那样,“UserData”的内容将被正确地转义为HTML.然而,显然不是这种情况,并且上述情况导致< h1>.在HTML标记中创建的元素. 然后问题可以提炼为: 给定任意用户输入,即将其显示为“纯文本”,将数据插入页面(跨度)并正确转义的简单/可靠/安全方法是什么? 如上所述,它应该在数据绑定控件的上下文中运行.我知道HttpUtility.HtmlEncode,但我想接受仍然使用控件的想法 – 也许我错过了这个任务的标准控件 – 安全地表示这种情况,而不需要包装Eval.如果这是误导的,基于逻辑或经验,最好包括在回复中.我不会拒绝在这种情况下我使用Label完全不合适的观点. 不幸的是,由于需要在SharePoint 2010上下文中运行,我的目标是ASP.NET for .NET 3.5,而不是ASP.NET 4. 解决方法关于什么:<asp:Label Text='<%#: Eval("UserData") %>' runat="server" />
这会逃避eval的输出,这只适用于.NET 4. 对于.NET 3.5,解决方案可以是: 代码隐藏: public object EvalEncode(object container,string expression)
{
string ouput = DataBinder.Eval(container,expression).ToString();
return HttpUtility.HtmlEncode(ouput);
}
标记: <%# EvalEncode(Container.DataItem,"Text") %> 而不是使用HttpUtility.HtmlEncode,使用AntiXSS库可能更好.对于.NET 4用户,它已经被支持到框架中. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 将表单提交为JSON(无AJAX)
- 在ASP.Net MVC中控制JsonResult中的序列化器也称为Json函数
- asp.net-mvc – 无法通过kendo上传从一个视图到另一个视图的
- asp.net-mvc – ASP.NET MVC 4移动显示模式停止工作
- asp.net-mvc – RouteValueDictionary的字符串URL
- .net – 如何在同一个域但不同的主机上共享本地存储令牌?
- ASP.NET中的网站或Web应用程序
- asp.net – 比HttpHandlers快的东西?
- asp.net – Internet Explorer 8超时太快页面POSTs
- .net – REST API:与身体的GET请求
- asp.net – Visual Studio“添加为链接”调试时不
- asp.net-mvc – ASP.NET MVC 4覆盖发出的html名称
- ASP.NET与IIS VS PHP与Apache
- asp.net-mvc – ASP.Net MVC2自定义模板通过Ajax
- asp.net-mvc-3 – 在ASP.NET MVC3中的自定义授权
- 实体框架 – EF Codefirst和RDLC Reports
- asp.net-mvc – ASP.NET MVC中的CSS/JS文件的自动
- 如何在ASP.NET MVC中保留/保护Edit中的某些字段
- asp.net-mvc – 在ClaimsIdentity上,BootstrapCo
- asp.net – 无法安装Microsoft.AspNet.Razor 3.0
