如何在 Web 表单中进行 Html.Encode

Posted

技术标签:

【中文标题】如何在 Web 表单中进行 Html.Encode【英文标题】:How to Html.Encode in webforms 【发布时间】:2011-04-30 10:55:46 【问题描述】:

我有一个 ASP.NET Web 窗体应用程序。有一个带有文本框的页面,用户可以在其中输入搜索词,用于查询数据库。

我知道我需要防止 javascript 注入攻击。我该怎么做?

在 MVC 中,我会使用 html.Encode。它似乎无法在 Web 表单中被识别。

谢谢!

【问题讨论】:

【参考方案1】:

在 .NET v4.0 及更高版本中,您可以在 Web 窗体上使用以下内容:

<%
   string notificationIcon = "<i class='fa fa-plus fa-icon fa-stack-right-top'></i>";
%>
<%: new HtmlString(notificationIcon) %>

Microsoft Docs

【讨论】:

通过使用new HtmlString,实际上你撤销了<%: new HtmlString(x) %> 与 &lt;%= x %&gt; 相同。有关正确的语法,请参阅下面的 default.kramer 的答案。【参考方案2】:

您可以使用Server.HtmlEncode(转换为HttpServerUtility.HtmlEncode),但Microsoft 有一个更好的Web 保护库,称为AntiXSS,您可以从CodePlex 下载。它包括一个实用程序,该实用程序使用HtmlEncoding 的白名单方法(更安全更好,recommended by OWASP 尽管它们指向older version)。它还具有允许您获取安全 HTML 片段等的工具。

但是,如果您什么都不看,请查看OWASP top 10。听起来您只是触及 Web 应用程序安全性的皮毛,而这是目前最好的资源。跨站点脚本攻击只是您需要防御的一大堆事情之一。

如果您必须处理任何类型的合规性(PCI、红旗等),这也是您需要遵守的内容

【讨论】:

对不起,反 XSS 输入过滤在输出到 HTML 阶段根本不能替代 HTML 编码纯文本。所有的反 XSS 工具都很脆弱,会破坏有效输入且不完整:充其量只是用于处理存在 HTML 转义问题的编写不佳的应用程序,而不是真正解决问题的方法。 (对不起 -ve,但对于天真的 webapp 作者来说,这是一个严重的问题,他们将文本字符串的各种形式的输出粘在一起,没有 HTML 转义、JSON 编码、URL 编码或者特定任务需要任何其他类型的上下文敏感编码。然后他们期望输入过滤反 XSS 层以某种方式修复它。这只不过是在地毯下刷问题。) 同意他不应该在输入阶段进行过滤,而应该在输出阶段进行过滤。 100% 准确。我链接到的 OWASP 指南涵盖了这一点。我只是建议带有白名单验证的 AntiXss 库在这方面比 Server.HtmlEncode 做得更好。我也同意天真的网络应用程序作者没有正确地做安全。这也是我将他指向 OWASP 前 10 名的原因,我的回答包括“你几乎没有触及表面”。但是,公平点,感谢您的反馈! 是的,OWASP 指南,尤其是“您必须对将不可信数据放入的 HTML 文档的部分使用转义语法”部分,是正确的。啊,是的,如果您在谈论 AntiXSS 中的转义功能,我想它们没问题;我将收回 -ve (尽管对我来说,不清楚它们在 .NET 现有的转义功能上真正提供了什么)。这是我不同意的图书馆中的另一个自动废话。【参考方案3】:

如果您使用的是 ASP.NET 4 或更高版本,则可以使用以下语法:

<%: Model.Username %>

这将对表达式进行 HTML 编码。 Scott Gu explains the benefit of this syntax:

我们选择了 语法,以便快速替换现有的 代码块实例。它还使您能够轻松地在代码库中搜索 元素,以查找和验证您未在应用程序中使用 HTML 编码的任何情况,以确保您的行为正确。

【讨论】:

【参考方案4】:

您可以使用HttpUtility.HtmlEncode

【讨论】:

【参考方案5】:

您可以在网络表单上调用

HttpUtility.HtmlEncode(foo);

注意不要重复编码。

【讨论】:

+1 表示“小心不要双重编码”。 第一编码 => [<test>],第二编码 => [&lt;test&gt;] 我更喜欢三重编码; [&amp;#x26;amp;lt;test&amp;#x26;amp;gt;].

以上是关于如何在 Web 表单中进行 Html.Encode的主要内容,如果未能解决你的问题,请参考以下文章

在使用简单的HTML Dom解析器进行解析之前,我如何登录Web表单网站?

如何对Web表单文件上传进行压力测试?

如何在 Html:encode 中从模型调用数组到局部视图

如何使用asp.net按钮通过jquery进行验证然后进入后台代码web表单

如何在 Web 应用程序(ASP.Net、C#、IIS)中进行文件上传

如何只回复我们的网络表单