我需要html编码标题属性(工具提示)吗?

Sla*_*uma 3 html asp.net encoding

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

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

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

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

编辑:

看一些答案,似乎我没有很好地说出我的问题,所以这里有一些补充:

如果我PersonShortName在我的数据库中的"PM" 上方的代码片段中,并且在PersonFullName其中包含非ASCII字符的名称,就像"PeterMüller"中的Umlauts 一样,Peter M&#252;ller当我HttpUtility.HtmlEncode在代码示例中应用时,浏览器会显示在工具提示中 -这是丑陋的.

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

<span title="<script>alert('Evil script')</script>" >Hello</span>
Run Code Online (Sandbox Code Playgroud)

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

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

也许HttpUtility.HtmlEncode不是正确的解决方案,我必须只过滤HTML标签,但不要编码简单的特殊字符,以确保正确显示纯文本并同时保护"丰富的HTML工具提示".但它看起来像是一项昂贵的工作 - 仅用于简单的工具提示.

Arv*_*tad 9

始终清理输出到浏览器.

如果将值"><script>blabla</script>插入作为字段的值,则用户可以基本上接管整个站点.在验证和更正代码时,它可能会弄得一团糟,但脚本仍然会运行.

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