我有一个WordPress插件,可以读取RSS源并将其输出到管理页面中的浏览器。在插件中,它使用WordPress中的标准feed.php模板(wp-includes / feed.php),该模板使用SimplePie通过WordPress获取提要。
该页面循环显示Feed项,并使用$item->get_title()
和$item->get_content()
通过直接回显输出项目标题和内容。
我有一个用户联系我告诉我他们在他们的网站上进行了安全审核,但由于我们使用了$item->get_content()
并且在输出到浏览器之前没有转发它而失败了,这是一个XSS漏洞,因为正在从供应商的网站上读取HTML并需要进行转义。
这是正确的吗?
在使用get_content()
功能的所有文档中,它们显示了$item->get_content()
结果的回显。
有人可以了解这一点,以便我可以通过安全审核小组和/或用户最好地解决这个问题 - 或者如果需要转义,则可以正确更新插件。
谢谢! 唐
答案 0 :(得分:1)
审核错误。 SimlePie 在内部转义内容。如果查看SimplePie类源,您将看到此属性定义将被剥离的标记:
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)
告诉它在快速模式下运行(因为你看到函数名不言自明:))或者调用{{1 }};它将以安全模式运行。
从SimplePie文档:
SimplePie通过清理数据来防范恶意攻击。