使用第三方集成工具对 HTML 进行双重编码

Double encoding of HTML with third party integration tool

我们集成了第三方应用程序,使用我们需要发送电子邮件和姓名的 javascript 代码。

此电子邮件和姓名来自上一步注册表。

因为我们需要在页面上打印我们对其进行编码的电子邮件和姓名。

some.survey({
    email: "test@test.pt",
    name: "Mon & Sons",
    properties: {"one":"123","two":"345"}
});

问题是第三方在打印前又对我们的字符串进行了编码,在浏览器中显示为:"Mon & Sons".

有谁知道如何解决这个问题?

这里有一个方法(基于):

function DecodeHTML(txt) {
  var el = document.createElement("div");
  el.innerHTML = txt;
  return el.innerText;
};

DecodeHTML("Mon & Sons");
//"Mon & Sons"

编辑:但是要注意 XSS 攻击。 third-party 应用程序可能这样做是为了将任何 ' 转义为 ' 并将 " 转义为 ",因此您可能希望在上述基础上构建根据您的需要,防止这种情况的想法。例如,如果您要在 HTML 页面上显示此信息,只需设置该页面中元素的 innerText 即可,例如nameelement.innerText = nametext;

sbgib 关于这将如何运作几乎是正确的。所以,我们现在输出编码后的字符串,并在将其发送到外部服务之前使用 Javascript 对其进行解码。

function DecodeHTML(txt) {
  var el = document.createElement("div");
  el.innerHTML = txt;
  return el.innerText;
}

some.survey({
    email: "test@test.pt",
    name: DecodeHTML("Mon & Sons"),
    properties: {"one":"123","two":"345"}
});