回显到页面时是否需要转义 simplepie $itme->get_content() 输出?

Does simplepie $itme->get_content() output need to be escaped when echoing to page?

我有一个 WordPress 插件,可以读取 RSS 提要并将其输出到管理页面中的浏览器。在插件中,它使用来自 WordPress (wp-includes/feed.php) 的标准 feed.php 模板,它使用 SimplePie 通过 WordPress 获取提要。

页面循环遍历提要项目并使用 $item->get_title()$item->get_content() 通过直接回显到页面来输出项目标题和内容。

我有一个用户联系我,告诉我他们在他们的网站上完成了安全审计但失败了,因为我们使用了 $item->get_content() 并且在输出到浏览器之前没有转义它,而且这是一个 XSS 漏洞,因为 HTML 正在从供应商的网站读取并且需要转义。

这是正确的吗?

在所有使用 get_content() 函数的文档中,它们显示回显 $item->get_content() 结果。

有人可以阐明这一点,以便我可以最好地与安全审计团队 and/or 用户一起解决这个问题 - 或者如果需要转义则正确更新插件。

谢谢! 唐

审核有误。 SimlePie 确实 在内部转义内容。如果您查看 SimplePie class 源代码,您会看到这个 属性 定义了将被剥离的标签:

public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');

因此 <script> 标签被剥离 - 因此无法进行 XSS 攻击。

这是 SimplePie 的默认行为,所以除非你故意通过调用 $feed->set_stupidly_fast(true) 告诉它在快速模式下 运行(正如你看到的函数名称不言自明:))或者通过调用 $feed->strip_htmltags(true) ;它将 运行 进入安全模式。

来自 SimplePie 文档:

SimplePie protects against malicious feeds by sanitizing the data.