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

Posted

技术标签:

【中文标题】在标记页面中,如何向 html 标记的 textContent 属性添加内容?【英文标题】:In a markup page, how can i add something to textContent property of an html tag? 【发布时间】:2019-04-19 23:30:05 【问题描述】:

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

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

我可以这样做吗:

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

代替:

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

是否有我们可以使用的 Angular6+ 版本的 JQXGrid,它可以从角度注入策略中受益?

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

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

【问题讨论】:

您可以使用很多替代方案(primeng、material 等),但 *** 并不是真正推荐库的地方 我不是来找图书馆的。我想知道 JQXGrid 中是否有清理方法,或者是否通过 HTML 应用我希望通过节点 textContent 节点而不是呈现的 HTML 节点显示的文本字符串。 您可以使用DomSanitizer 清理您的HTML @user184994 我知道 DomSanitizer,但这是为了绕过 Angular 安全规则。虽然我只是查看了 sanitize 方法,这可能是一个有效的选择,尤其是因为现在,我正在开发一个 Angular 组件。我必须阅读 sanitize 命令的具体示例。 【参考方案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>

【讨论】:

由于 xml 的弃用性质,我可能想改用 &lt;pre&gt;。我不想像在纯标记中那样使用 javascript。我会看看可能做我想做的事的 pre 标签。尝试做时:&lt;pre&gt;&lt;a href="#"&gt;test&lt;/a&gt;&lt;/pre&gt; 它没有按我预期的那样做。生病继续寻找其他演示

以上是关于在标记页面中,如何向 html 标记的 textContent 属性添加内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串转换为数组,用逗号标记android kotlin [重复]

如何Angularjs1.3在页面中输出带Html标记的文本

如何在不重新加载 HTML 页面的情况下重定向锚标记链接?

如何在 HTML HREF 中组合锚标记和传递的变量?

如何正确地将所需的 HTML 属性设置为 TymeLeaf 页面的输入标记?

如何在html页面中使用js变量