asp.net - 我需要对标题属性(工具提示)进行 html 编码吗?

标签 asp.net html encoding

在我的标记中,我使用了 HTML title attributes,我通过各种 ASP.NET 控件的 Tooltip 属性设置了它,例如 asp:Label。这些标题的内容来自数据库,我使用数据绑定(bind)语法,例如:

<asp:Label ID="PersonLabel" runat="server" 
    Text='<%# HttpUtility.HtmlEncode(Eval("PersonShortName")) %>'
    ToolTip='<%# HttpUtility.HtmlEncode(Eval("PersonFullName")) %>' />

现在,工具提示似乎在 Windows 和我测试过的浏览器中显示为纯文本。所以 HTML 编码不是我真正想要的,我倾向于删除编码。

例如,如果数据库字段可能包含脚本标签,这会不会有任何危险?我的问题基本上是:是否始终保证 HTML-title 属性显示为纯文本?它们是否始终显示为工具提示,或者某些浏览器(或操作系统)是否可能以其他方式显示它们并允许并在标题属性中呈现 HTML 内容?

编辑:

看了一些回答,好像我的问题措辞不太好,所以这里有一些补充:

如果我的数据库中的 PersonShortName 上面的代码片段中有一个名为“PM”的 PersonFullName 名称,其中包含非 ASCII 字符,例如变音符号当我像代码示例中那样应用 HttpUtility.HtmlEncode 时,浏览器会在工具提示 Peter Müller 中显示“Peter Müller” - 这很丑陋。

我还测试了一个简单的 HTML 片段,例如:

<span title="<script>alert('Evil script')</script>" >Hello</span>

title 属性中的脚本没有在启用 Javascript 的浏览器中运行(使用 Firefox 测试),而是以纯文本形式显示在工具提示中。因此我的猜测是标题属性总是呈现为纯文本。

但正如 Felipe Alsacreations 在下面回答的那样,存在“丰富的工具提示插件”,可以将标题属性呈现为 HTML。所以在这种情况下编码是一件好事。但我怎么知道呢?

也许 HttpUtility.HtmlEncode 不是正确的解决方案,我必须只过滤 HTML 标签而不是对简单的特殊字符进行编码,以确保正确显示纯文本并保护“富 HTML”工具提示”同时出现。但这看起来像是一项代价高昂的工作 - 仅用于简单的工具提示。

最佳答案

始终清理浏览器的输出。

如果值像 "><script>blabla</script>作为您字段的值插入,用户基本上可以接管您的整个站点。当涉及到验证和正确代码时,它可能会弄得一团糟,但脚本仍会运行。

所以回答你的问题:不,如果用户知道他/她在做什么,不能保证 HTML-title 属性显示为纯文本。

关于asp.net - 我需要对标题属性(工具提示)进行 html 编码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3127510/

相关文章:

c# - 从后面的代码添加多个内联样式

javascript - 向侧边导航栏添加过渡

ubuntu - VM 使用 latin1 的 native 名称编码运行,这可能会导致 Elixir 出现故障,因为它期望使用 utf8

javascript - ASP.NET MVC AJAX 将参数传递给 Controller

javascript - 文本框只取数值,不在开始时取零

c# - web.config 中的 customError 仅适用于 .aspx 页面

html - 可以为所有非继承的 css 属性使用继承值吗?

javascript - 如何在 Javascript 中实现随机图像?

php - 清理数据以在引号内和 URL 内使用

python - C 和 Python 中的数据编码