我注意到一个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。
答案 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>