Javascript 这是将html转换为文本的安全方法吗

Javascript 这是将html转换为文本的安全方法吗,javascript,xss,Javascript,Xss,我有一个来自一些半不可信API的响应,该API应该包含html。 现在我想把它转换成纯文本,基本上去掉所有的格式,这样我可以很容易地搜索它,然后显示(部分)它 我想到了这个: 函数转换html文本(html){ const div=document.createElement(“div”); //假设:因为div不是文档的一部分 //-未执行任何脚本 //-无布局通行证 div.innerHTML=html; //假设:空白仍然是标准化的 //假设:如果将元素插入DOM,则返回用户将看到的文本。

我有一个来自一些半不可信API的响应,该API应该包含html。 现在我想把它转换成纯文本,基本上去掉所有的格式,这样我可以很容易地搜索它,然后显示(部分)它

我想到了这个:

函数转换html文本(html){
const div=document.createElement(“div”);
//假设:因为div不是文档的一部分
//-未执行任何脚本
//-无布局通行证
div.innerHTML=html;
//假设:空白仍然是标准化的
//假设:如果将元素插入DOM,则返回用户将看到的文本。
//减去那些依赖于样式表的东西。
返回div.innerText;
}
常量html=`
一些随机的不受信任的字符串,应该包含html。
大概是一些“富文本”。
一些或,一个或两个链接,一点之类的。
在任何情况下都不是一个完整的html文档。
`;
const text=convertHtmlText(html);
const p=document.createElement(“p”);
p、 text内容=文本;
文件.正文.附件(p);
我认为这是安全的,因为只要用于转换的
div
没有插入到文档中,脚本就不会执行


问题:这安全吗?

不,这根本不安全

函数转换html文本(html){
const div=document.createElement(“div”);
//假设:因为div不是文档的一部分
//-未执行任何脚本
//-无布局通行证
div.innerHTML=html;
//假设:空白仍然是标准化的
//假设:如果将元素插入DOM,则返回用户将看到的文本。
//减去那些依赖于样式表的东西。
返回div.innerText;
}
常量html=`Hi`;
const text=convertHtmlText(html);
const p=document.createElement(“p”);
p、 text内容=文本;

文件.正文.附件(p)不,这根本不安全

函数转换html文本(html){
const div=document.createElement(“div”);
//假设:因为div不是文档的一部分
//-未执行任何脚本
//-无布局通行证
div.innerHTML=html;
//假设:空白仍然是标准化的
//假设:如果将元素插入DOM,则返回用户将看到的文本。
//减去那些依赖于样式表的东西。
返回div.innerText;
}
常量html=`Hi`;
const text=convertHtmlText(html);
const p=document.createElement(“p”);
p、 text内容=文本;

文件.正文.附件(p)是的。使用textContent属性将阻止执行所有XS。使用innerHTML将是一种可能的vurnerability。是的,这是实现这一点的首选方法。我认为安全性中不存在“半信任”之类的东西。我认为这是要么全有,要么全无。为此,您确实应该利用框架或库。@当然,您是对的。我的意思是,当我写半可信的是,我不认为API在一般情况下发送敌意内容。因此,我必须进行清理以防止可能的XSS,但转换后的文本被篡改或为空是可以的。最糟糕的情况可能是用户得到错误的肯定/否定搜索结果。这里的一些评论可能会让未来的读者相信您最初的实现是安全的;这与下面的答案不同。理想情况下,这些评论应该被编辑。使用textContent属性将阻止执行所有XS。使用innerHTML将是一种可能的vurnerability。是的,这是实现这一点的首选方法。我认为安全性中不存在“半信任”之类的东西。我认为这是要么全有,要么全无。为此,您确实应该利用框架或库。@当然,您是对的。我的意思是,当我写半可信的是,我不认为API在一般情况下发送敌意内容。因此,我必须进行清理以防止可能的XSS,但转换后的文本被篡改或为空是可以的。最糟糕的情况可能是用户得到错误的肯定/否定搜索结果。这里的一些评论可能会让未来的读者相信您最初的实现是安全的;这与下面的答案不同。理想情况下,应编辑这些评论。