- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在旧版 ASP.NET 4.0 应用程序中,我们正在针对各种安全问题进行更新,我们在包含 HtmlEncoded 项目的列表框和下拉列表中遇到了问题。对于包含撇号的 ListItem 文本值,浏览器无法识别列表框和下拉列表中的编码,因此在呈现时无法将文本解码回撇号。
对于请求的示例:
考虑 Test.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox runat="server" ID="TheListBox" ></asp:ListBox>
</div>
</form>
</body>
</html>
及其代码隐藏:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TheListBox.Items.Add(new ListItem("'hello'", HttpUtility.HtmlEncode("hi")));
TheListBox.Items.Add(new ListItem(HttpUtility.HtmlEncode("David's Test"), "hi"));
}
}
结果页面显示如下:
在发布的 SO 问题中 here ,这是非常相似的,OP 选择了一个答案,只是承认 Microsoft 将撇号的编码记录为 ASP.NET 4.0 发布时的回退。然而,对于我们来说,这个答案并没有解决我们在 IE11 和 FireFox 中看到的浏览器端的呈现 问题。也就是说,我们确实对编码本身没有问题,但事实上编码并没有始终如一地得到遵守。
我们的进一步问题是我们应用程序的某些方面在列表框之间移动编码数据以在回发时提交,并且未解码撇号的存在然后导致 ASP.NET 反 XSS 检查在请求,认为该值是恶意的,但实际上不是。如果删除了编码,则回发成功。
站点已设置为在 web.config 中呈现与 .Net 3.5 兼容的控件。我们已经尝试完全删除它,然后明确设置为 4.0(大概是默认值),两者都没有任何区别。我考虑过滚动我自己的 HtmlEncode 覆盖以忽略包含撇号的字符串,但对于浏览器按预期在非列表框实体(例如文本框和标签)上呈现编码标记的大多数情况来说,这似乎过于严厉。
是否有其他一些简单/明显的解决方法或设置我只是忽略来克服这个问题?我搜索过 SO 和其他以一般术语间接讨论撇号问题的站点,但似乎没有一个站点具有特定于 ASP.NET 4.0 的一致解决方案。
最佳答案
虽然我意识到这个问题没有得到太多回应,但我将在此处添加一些额外的发现,几乎构成了对可能处于维护位置的任何人的利益的答案旧版 ASP.NET 4.0 站点。
原始帖子中说明的真正问题是 ListBox 中的项目被双重编码。这是由源代码中说明的初始显式 HtmlEncoding 引起的,加上一个额外的显然在呈现时调用的 HtmlEncode。
我们认为,问题是很多,但显然不是所有,股票 ASP.NET 4.x 系列控件自动呈现时调用 HtmlEncode。
当我们注意到一个页面的呈现内容时,我们做出了这个推断,该页面具有一个简单的 ListBox 控件,该控件包含一个项目,其文本中包含一个和号,包裹在一个显式 HtmlEncode 调用中,实际上是用一个硬“&”呈现的,这意味着它有 < em>已经被 HtmlEncoded。
似乎 ASP TextBox、DropDownList 和 ListBox 控件在渲染。 ASP Label 控件不。 GridView 控件具有显式启用/禁用 HtmlEncoding 的属性。这些控件的 Html 等价物,例如使用 runat="server" 属性修改的传统 HTML 元素,也在呈现时进行 HtmlEncoded。
底线是,除了上面列出的那些之外,关于给定控件是否 HtmlEncodes 其易受攻击的内容的任何问题只能通过测试相关控件来绝对知道。
当我发现更多关于确定哪些控件提供自己的编码的信息时,我会更新它。
编辑:
额外的测试表明以下两个控件都是 HtmlEncoded,无论是在标记中显式设置值还是以编程方式添加/定义时:
我强烈怀疑,但尚未测试,任何带有 runat='server' 的 native HTML 控件都会有类似的行为。
关于c# - 带有 HtmlEncoded ListItems 的 ASP.NET 4.0 ListBox 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48870513/
我想使用 li 和 ul 制作一个多级下拉列表,以便显示我博客中按年和月排序的所有文章。我希望我的下拉菜单看起来像 Google Blogspot 下拉菜单: 这是我的 CSS 和 HTML 代码 u
我在 Win 7 64 机器上将 CodeBlocks 与 gcc 4.7.2 和 gmp 5.0.5 结合使用。开始使用 gmpxx 后,我看到一个奇怪的段错误,它不会出现在 +、- 等运算符中,但
我正在使用 tern 为使用 CodeMirror 运行的窗口提供一些增强的智能感知,它工作正常,但我遇到了一个问题,我想添加一些自定义“types”,可以这么说,这样下拉列表中它们旁边就有图标了。我
我正在尝试让我的 PC 成为 Android 2.3.4 设备的 USB 主机,以便能够在不需要实际“附件”的情况下开发 API。为此,我需要将 PC 设置为 USB 主机和“设备”(在我的例子中是运
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我在设置服务器方面几乎是个新手,但遇到了一个问题。我有一个 Ubuntu 16.04 VPS 并安装了 Apache2 和 Tomcat7。我正在为 SSL 使用 LetsEncrypt 和 Cert
我在一个基于谷歌地图的项目上工作了超过 6 个月。我使用的是 Google Maps API V1 及其开发人员 API key 。当我尝试发布应用程序时,我了解到 Google API V1 已被弃
我是 Python 的新手,所以如果我对一些简单的事情感到困惑,请原谅。 我有一个这样的对象: class myObject(object): def __init__(self):
这个问题已经有答案了: How can I access object properties containing special characters? (2 个回答) 已关闭 9 年前。 我正在尝
我有下面的 CSS。我想要的是一种流体/液体(因为缺乏正确的术语)css。我正在为移动设备开发,当我改变模式时 从纵向 View 到陆地 View ,我希望它流畅。现在的图像 在陆地 View 中效
我正在尝试使用可以接受参数的缓存属性装饰器。 我查看了这个实现:http://www.daniweb.com/software-development/python/code/217241/a-cac
这个问题在这里已经有了答案: Understanding slicing (36 个答案) 关闭 6 年前。 以a = [1,2,3,4,5]为例。根据我的直觉,我认为 a[::-1] 与 a[0:
mysqldump -t -u root -p mytestdb mytable --where=datetime LIKE '2014-09%' 这就是我正在做的事情,它会返回: mysqldum
我正在制作销售税计算器,除了总支付金额部分外,其他一切都正常。在我的程序中,我希望能够输入一个数字并获得该项目的税额我还希望能够获得支付的总金额,包括交易中的税金。到目前为止,我编写的代码完成了所有这
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是否必须进行任何额外的设置才能让 apache-airflow 在任务失败时向我发送电子邮件。我的配置文件中有以下内容(与默认值保持不变): [email] email_backend = airf
这个问题在这里已经有了答案: What does the $ symbol do in VBA? (5 个回答) 3年前关闭。 使用返回字符串(如 Left)的内置函数有什么区别吗?或使用与 $ 相同
我有一个用VB6编写的应用程序,我需要使用一个用.NET编写的库。有什么方法可以在我的应用程序上使用该库吗? 谢谢 最佳答案 这取决于。您可以控制.NET库吗? 如果是这样,则可以修改您的库,以便可以
当我创建一个以 ^ 开头的类方法时,我尝试调用它,它给了我一个错误。 class C { method ^test () { "Hi" } } dd C.new.test; Too m
我已经使用 bower 安装了 angularjs 和 materialjs。 凉亭安装 Angular Material 并将“ngMaterial”注入(inject)我的应用程序,但出现此错误。
我是一名优秀的程序员,十分优秀!