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

     2023-02-19     144

关键词:

【中文标题】如何在 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 表单文件上传进行压力测试?

】如何对Web表单文件上传进行压力测试?【英文标题】:HowdoIstresstestawebformfileupload?【发布时间】:2010-09-1817:54:26【问题描述】:我需要测试一个需要上传文件的网络表单。每次上传的文件大小约为10MB。我想测试服务器是否可以... 查看详情

在 C# Web 表单中单击 [确定] 后,如何在 .aspx 页面之间传递变量

】在C#Web表单中单击[确定]后,如何在.aspx页面之间传递变量【英文标题】:HowdoIpassvariablebetween.aspxpagesafterclicking[OK]inaC#webform【发布时间】:2011-09-2305:02:52【问题描述】:我是网络表单的新手。1)我的默认Web表单是Default.aspx。它有... 查看详情

如何在 web 表单中包含部分视图

】如何在web表单中包含部分视图【英文标题】:Howtoincludeapartialviewinsideawebform【发布时间】:2010-10-1617:00:12【问题描述】:我正在编程的一些网站同时使用ASP.NETMVC和WebForms。我有一个部分视图,我想将它包含在一个网络表单中。... 查看详情

如何在标准 Web 表单.Net 中返回 JSON 对象

】如何在标准Web表单.Net中返回JSON对象【英文标题】:HowtoreturnaJSONobjectinstandardwebforms.Net【发布时间】:2011-12-2517:50:07【问题描述】:目标是调用一个方法,然后返回一个JSON对象。我是JSON新手。我有一个default.aspx,其中包含以下... 查看详情

在 C# Web 表单中,如何使用泛型类型从数据集中加载列表?

】在C#Web表单中,如何使用泛型类型从数据集中加载列表?【英文标题】:InC#webforms,howcanIloadaListfromadatasetusinggenerictypes?【发布时间】:2016-09-3000:35:32【问题描述】:我正在尝试将数据集中的内容映射到列表中,但我希望能够将... 查看详情

如何在 Web 表单中使用 javascript 隐藏复选框和复选框文本

】如何在Web表单中使用javascript隐藏复选框和复选框文本【英文标题】:howtohidecheckboxandcheckboxtextusingjavascriptinwebforms【发布时间】:2021-08-0809:09:24【问题描述】:我正在处理网络表单并编写一段javascript来隐藏复选框及其文本,但... 查看详情

如何在 MS-Access 的表单上显示 Web 浏览器控件中的表格字段内容?

】如何在MS-Access的表单上显示Web浏览器控件中的表格字段内容?【英文标题】:HowtoshowtablefieldcontentinWebBrowerControlonforminMS-Access?【发布时间】:2016-01-0602:10:19【问题描述】:我想在Access中的表单上显示HTML格式的文本。我使用绑定... 查看详情

如何在表单中进行 webview 和调整文本?

】如何在表单中进行webview和调整文本?【英文标题】:howtodowebviewandadjusttextinsidetheform?【发布时间】:2019-05-0317:55:13【问题描述】:我是代号一的新手。我想使用webview做应用程序。当我在模拟器下面添加代码时,将关闭汽车。... 查看详情

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

】如何在Html:encode中从模型调用数组到局部视图【英文标题】:HowtocallanarrayfrommodeltoapartialviewinCHtml:encode【发布时间】:2014-09-2606:42:50【问题描述】:我有三个常量,constSTATUS_PENDING=1;constSTATUS_APPROVED=2;constSTATUS_DENY=3;对他们来说我... 查看详情

如何防止在 PHP 中重复提交表单(跨多个窗口进行保护)?

】如何防止在PHP中重复提交表单(跨多个窗口进行保护)?【英文标题】:HowcanipreventduplicateformsubmissioninPHP(thatprotectsacrossmultiplewindows)?【发布时间】:2012-03-2507:05:59【问题描述】:我试过了:POST/REDIRECT/GET方法,但这不能防止同... 查看详情

如何在web页上实现文件上传

参考技术AJAVAWEB文件上传步骤如下:实现Web开发中的文件上传功能,两个操作:在Web页面添加上传输入项,在Servlet中读取上传文件的数据并保存在本地硬盘中。1、Web端上传文件。在Web页面中添加上传输入项:<inputtype="file&q... 查看详情

如何在 Bootstrap 中对不同表单标签中的按钮进行分组

】如何在Bootstrap中对不同表单标签中的按钮进行分组【英文标题】:HowtogroupbuttonsindifferentformstagsinBootstrap【发布时间】:2012-07-1019:39:31【问题描述】:如何在Twitter的Bootstrap中将不同表单标签内的按钮组合在一起?现在我得到的... 查看详情

如何在 Alamofire 4 中进行多部分表单数据上传?

】如何在Alamofire4中进行多部分表单数据上传?【英文标题】:HowtodoamultipartFormDatauploadinAlamofire4?【发布时间】:2017-01-1617:25:19【问题描述】:迁移对我来说简直就是一场噩梦。我有这个旧版本的Swift/iOS/Alamofire的旧代码letintVal=0Ala... 查看详情

如何使用 ASP.NET 在 web.config 文件中写入 appSetting?

】如何使用ASP.NET在web.config文件中写入appSetting?【英文标题】:HowIcanwriteinappSettinginweb.configfileusingASP.NET?【发布时间】:2011-09-0504:33:54【问题描述】:我可以轻松地在web.config文件中读取我的appSetting,然后在asp.net表单中填写所有... 查看详情

如何在本地安装 ASP.NET Web 表单项目?

】如何在本地安装ASP.NETWeb表单项目?【英文标题】:HowtoinstallanASP.NETwebformsprojectlocally?【发布时间】:2018-09-2221:43:27【问题描述】:最近,我尝试在本地安装一个ASP.NET4.0Web窗体Web应用程序...我已将Web.config文件复制到项目中并启... 查看详情

如何在 Web 表单中实现 AngularJS 控制器?

】如何在Web表单中实现AngularJS控制器?【英文标题】:HowtoimplementanAngularJScontrollerinawebform?【发布时间】:2013-09-2604:29:07【问题描述】:我有一个AngularJS控制器,我想在我的MVC网络表单视图页面中使用它。我创建了一个简单的代... 查看详情

如何使用 C# 从字节数组中显示 Web 表单中的图像

】如何使用C#从字节数组中显示Web表单中的图像【英文标题】:HowtodisplayimageinsidewebformfromByteArraywithC#【发布时间】:2013-08-1304:41:38【问题描述】:这是我的代码,它所做的只是清除网页并绘制图像,因此表单的其余部分消失了!... 查看详情

如何在 Jetty HttpClient 中进行多部分/表单数据发布

】如何在JettyHttpClient中进行多部分/表单数据发布【英文标题】:Howtodomultipart/form-datapostinJettyHttpClient【发布时间】:2011-08-3110:13:44【问题描述】:我想知道是否有人可以帮助我。对于Java项目,我想使用JettyHttpClient将数据发送到Re... 查看详情