使用第三方集成工具对 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"}
});
我们集成了第三方应用程序,使用我们需要发送电子邮件和姓名的 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"}
});