【发布时间】:2010-11-08 13:41:33
【问题描述】:
我正在使用一个 Web 服务,它会给我以下值:
var text = "<<<&&&";
我需要用javascript打印这个看起来像“
但这里有个问题:我不能使用内部 HTML(我实际上是将此值发送到创建文本节点的原型库,因此它不会对我的原始 html 字符串进行转义。如果编辑库不会是选项,你将如何对这个 html 进行转义?
我需要在这里了解真正的交易,取消转义这种类型的字符串有什么风险? innerHTML 是如何做到的?还有哪些其他选择?
编辑-问题不在于使用 javascript 正常的转义/unescape 甚至 jQuery/prototype 实现它们,而是关于使用任何这些可能带来的安全问题......又名“他们告诉我使用它们非常不安全”
(对于那些试图理解我在用 innerHTML 转义这个奇怪的字符串时到底在说什么,看看这个简单的例子:
<html>
<head>
<title>createTextNode example</title>
<script type="text/javascript">
var text = "<<<&&&";
function addTextNode(){
var newtext = document.createTextNode(text);
var para = document.getElementById("p1");
para.appendChild(newtext);
}
function innerHTMLTest(){
var para = document.getElementById("p1");
para.innerHTML = text;
}
</script>
</head>
<body>
<div style="border: 1px solid red">
<p id="p1">First line of paragraph.<br /></p>
</div><br />
<button onclick="addTextNode();">add another textNode.</button>
<button onclick="innerHTMLTest();">test innerHTML.</button>
</body>
</html>
【问题讨论】:
-
这个问题怎么可能是重复的?这个问题比应该重复的问题更早。
-
您可以在answer to similar qestion 中看到使用innerHTML 的安全问题。为避免 XSS 漏洞,您应该使用he library。您可以在另一个answer to similar question 中查看代码示例。
标签: javascript html escaping