在我的标记中我使用HTML title attributes
我设置的Tooltip
各种 ASP.NET 控件的属性,例如asp:Label
。这些标题的内容来自数据库,我使用数据绑定语法,例如:
<asp:Label ID="PersonLabel" runat="server"
Text='<%# HttpUtility.HtmlEncode(Eval("PersonShortName")) %>'
ToolTip='<%# HttpUtility.HtmlEncode(Eval("PersonFullName")) %>' />
现在,工具提示似乎在 Windows 和我测试过的浏览器中显示为纯文本。所以 HTML 编码不是我真正想要的,我倾向于删除编码。
例如,如果数据库字段可能包含脚本标签,这会以任何方式存在危险吗?我的问题基本上是:是否始终保证 HTML-title 属性显示为纯文本?它们是否始终显示为工具提示,或者某些浏览器(或操作系统)是否可能以其他方式显示它们并允许并在标题属性中呈现 HTML 内容?
Edit:
看了一些答案,感觉我的问题表达得不太好,所以补充一下:
如果我在上面的代码片段中有一个PersonShortName
我的数据库中的“PM”并且作为PersonFullName
包含非 ASCII 字符的名称,例如浏览器在工具提示中显示的“Peter Müller”中的变音符号Peter Müller
当我申请时HttpUtility.HtmlEncode
就像代码示例中一样 - 这很丑陋。
我还测试了一个简单的 HTML 片段,例如:
<span title="<script>alert('Evil script')</script>" >Hello</span>
title 属性中的脚本未在启用了 Javascript 的浏览器中运行(使用 Firefox 进行测试),而是以纯文本形式显示在工具提示中。因此我的猜测是标题属性始终呈现为纯文本。
但正如 Felipe Alsacreations 在下面回答的那样,存在“丰富的工具提示插件”,可以将标题属性呈现为 HTML。所以在这种情况下编码是一件好事。但我怎么知道呢?
Perhaps HttpUtility.HtmlEncode
不是正确的解决方案,我必须仅过滤 HTML 标签,而不对简单的特殊字符进行编码,以确保纯文本正确显示并同时保护“丰富的 HTML 工具提示”。但这看起来是一项成本高昂的工作——仅用于一个简单的工具提示。