在标记页面中,如何向html标签的textContent属性添加一些内容?

时间:2018-11-16 18:35:35

标签: javascript angular jqxgrid jqxwidgets

我注意到一个XSS漏洞正在解决jqxGrid将在何处渲染任何单元格。例如:<a href="javascript:alert('test');">Hello</a>。因此,我的想法是找到解决此问题的方法。我目前正在遍历数据以显示需要显示的内容,并且可以传递一个渲染器和cellsrenderer函数。我的问题是:如何返回HTML字符串,以使单元格显示参数6表示的文本。

我有自己的清理脚本,也可以应用剥离脚本,但我当时想我可以将值添加到HTML元素的textContent属性中。这可能吗?

我能做些什么吗?

return "<div text-content='VALUE'></div>";

代替:

return "<div>" + value + " </div>";

是否可以使用Angular6 +版本的JQXGrid,它将受益于角度注入策略?

我个人很想自己制作这个网格,但是...要解决这个问题将花费太多的开发时间。

假设:服务器会对此进行检查,而客户端也会这样做。但是,我知道我们仍然会得到这样的无效HTML。话虽如此,假设上面的 value 确实包含恶意的html / javascript。

1 个答案:

答案 0 :(得分:1)

如果要显示结果,可以使用xmp标签。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/xmp

div {
  font-family: sans-serif;
}
<div>
  <p>This is some HTML</p>
</div>
<xmp>
  <p>This is some HTML</p>
</xmp>

您还可以将未经消毒的HMTL添加到元素中,并取回textContent或innerText,然后将其添加到页面中。

let html = "<ol><li>This is some HTML</li><li>And some more</li></ol>";

let unsanitized = document.querySelector('#unsanitized');
let sanitized = document.querySelector('#sanitized');

let tempEl = document.createElement('div');
tempEl.innerHTML = html;

unsanitized.innerHTML = html;
sanitized.innerHTML = tempEl.textContent;
<div id="unsanitized"></div>
<div id="sanitized"></div>