首先,我以html的形式从API返回。这将在我的jqgrid中使用。样本返回将是这样的
我的对象的示例名称是obj
。然后obj.something
在下方。
<div title="custom_title">
<div id="upper">
data from somewhere and this is the part that sometimes need to be sanitized without affecting the other tags
</div>
</div>
到目前为止我尝试过这样做:
var esc = $('');
然后做了这个:esc.text(obj.something).html();
但它消毒了所有这些。
有什么我可能不知道如何纯粹在javascript上消毒吗?
非常感谢任何帮助。
答案 0 :(得分:1)
在这种情况下,您可以使用DOMPurify
DOMPurify清理HTML并防止XSS攻击。您可以使用充满脏HTML的字符串提供DOMPurify,它将返回一个包含干净HTML的字符串。 DOMPurify将删除包含危险HTML的所有内容,从而防止XSS攻击和其他恶意行为。
答案 1 :(得分:-1)
在此同意@Juhana:&#34; 返回包含在HTML中的未经过整理的输出是您应该避免的事情。&#34;但是如果没有,你想控制和消毒DOM,你可以在普通的JS中做到这一点:
obj = {};
obj.something = '<div title="custom_title"><div id="upper">data from somewhere and this is the part that sometimes need to be sanitized without affecting the other tags</div></div>';
var container = document.createElement("div"); //create an element in memory
container.insertAdjacentHTML('afterbegin', obj.something); //serialize the HTML string into the structure.
container.querySelector("#upper").innerHTML = ""; //empty the element, removing the data in it. (or do something else with it, like stripping all the a elements that do not start with http(s).
console.log(container)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
它将HTML obj呈现为内存元素,而不是对其执行DOM操作并删除ID为upper
的div的内容。完成后,将容器div的内容插入到网格中。