为什么html属性返回为';HTMLDECODE';即使编码在html源代码中?
我使用html属性title设置如下提示:为什么html属性返回为';HTMLDECODE';即使编码在html源代码中?,html,dom,html-encode,Html,Dom,Html Encode,我使用html属性title设置如下提示: <a href... title="Go to next chapter">Go</a> <div style="position:absolute..."><script>alert(10)</script></div> 然后jquery插件遍历所有的[title]属性并生成漂亮的工具提示。非常简单,为上面的链接创建了一个新的div <div style="pos
<a href... title="Go to next chapter">Go</a>
<div style="position:absolute..."><script>alert(10)</script></div>
然后jquery插件遍历所有的[title]属性并生成漂亮的工具提示。非常简单,为上面的链接创建了一个新的div
<div style="position:absolute...">Go to next chapter</div>
转到下一章
问题是,标题可以由用户编辑,所以他可以写任何他想要的东西。我最初认为html编码很好,但结果证明我错了。
如果我有
<a id="a" title="<script>alert(10);</script>">Go</a>
Go
然后工具提示div如下所示:
<a href... title="Go to next chapter">Go</a>
<div style="position:absolute..."><script>alert(10)</script></div>
警报(10)
1) 为什么浏览器在查询标题属性的值时对其进行解码
2) 我该怎么解决呢?(我知道有一种解决方案是双重html编码,但它太满了)
如何测试它:考虑这个代码
<html>
<body>
<!-- encoding once, this doesn't work -->
<a id="a" title="<script>alert(10);</script>">atitle</a>
<!-- encoding twice, this works -->
<a id="b" title="&lt;script&gt;alert(10);&lt;/script&gt">btitle</a>
<script>
function w(x){ document.write(x.attributes["title"].value);}
w(a); // shows alert
w(b); // outputs it correctly into the page
</script>
</body>
</html>
阿蒂特尔
标题
函数w(x){document.write(x.attributes[“title”].value);}
w(a);//显示警惕
w(b);//将其正确输出到页面中
1)属性值就是解码后的值——如果你仔细想想,这是唯一有意义的方法。如果将javascript值设置为“\n”,然后向其发出警报,是否要返回“\n”或真正的换行符?标题属性是文本。。。您只是碰巧需要对其进行HTML编码才能编写它
2) 您可以对其进行双重编码,也可以使用文本节点:
var node = document.createTextNode(x.attributes['title'].value);
document.appendChild(node);
这是首选方法,然后爬行器/非javascript浏览器将看到正确的title属性