我有一些与 XML-RPC 后端通信的 JavaScript 代码。
XML-RPC 返回以下形式的字符串:
<img src='myimage.jpg'>
但是,当我使用 JavaScript 将字符串插入 HTML 时,它们会按字面意思呈现。我没有看到图像,我确实看到了字符串:
<img src='myimage.jpg'>
我的猜测是 HTML 正在通过 XML-RPC 通道进行转义。
如何在 JavaScript 中对字符串进行转义?我尝试了此页面上的技术,但没有成功:http://paulschreiber.com/blog/2008/09/20/javascript-how-to-unescape-html-entities/ http://paulschreiber.com/blog/2008/09/20/javascript-how-to-unescape-html-entities/
还有哪些其他方法可以诊断该问题?
这里给出的大多数答案都有一个巨大的缺点:如果您尝试转换的字符串不可信,那么您最终会得到一个跨站脚本 (XSS) 漏洞 https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML#Security_considerations。对于函数中的接受的答案 https://stackoverflow.com/a/1912522/785541, 考虑以下:
htmlDecode("<img src='dummy' onerror='alert(/xss/)'>");
这里的字符串包含一个未转义的 HTML 标签,因此不需要解码任何内容htmlDecode
函数实际上会运行字符串内指定的 JavaScript 代码。
这可以通过使用来避免DOM解析器 https://developer.mozilla.org/en-US/docs/Web/API/DOMParser这是支持的所有现代浏览器 https://developer.mozilla.org/en-US/docs/Web/API/DOMParser#Browser_compatibility:
function htmlDecode(input) {
var doc = new DOMParser().parseFromString(input, "text/html");
return doc.documentElement.textContent;
}
console.log( htmlDecode("<img src='myimage.jpg'>") )
// "<img src='myimage.jpg'>"
console.log( htmlDecode("<img src='dummy' onerror='alert(/xss/)'>") )
// ""
该函数保证不会运行任何 JavaScript 代码作为副作用。任何 HTML 标签都将被忽略,仅返回文本内容。
兼容性说明: 解析 HTMLDOMParser
至少需要 Chrome 30、Firefox 12、Opera 17、Internet Explorer 10、Safari 7.1 或 Microsoft Edge。因此,所有不支持的浏览器都已经过时了,截至 2017 年,唯一偶尔仍能在野外看到的浏览器是较旧的 Internet Explorer 和 Safari 版本(通常这些浏览器的数量还不足以打扰)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)