当前位置 : 主页 > 网络编程 > ASP >

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

来源:互联网 收集:自由互联 发布时间:2021-06-24
在我的标记中,我使用 HTML标题属性,我通过各种ASP.NET控件的工具提示属性设置,如asp:Label.这些标题的内容来自数据库,我使用数据绑定语法,例如: asp:Label ID="PersonLabel" runat="server" Text='
在我的标记中,我使用 HTML标题属性,我通过各种ASP.NET控件的工具提示属性设置,如asp:Label.这些标题的内容来自数据库,我使用数据绑定语法,例如:

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

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

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

编辑:

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

如果我在我的数据库中的“PM”的PersonShortName上面的代码片段中,并且作为PersonFullName,其中包含非ASCII字符的名称,如“PeterMüller”中的Umlauts,则浏览器显示在工具提示中Peter M&#252; ller当我在代码示例中应用HttpUtility.HtmlEncode时 – 这很难看.

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

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

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

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

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

始终清理输出到浏览器.

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

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

网友评论