我们有一个应用程序,它使用 XSLT 格式化 XML 数据以显示为 XHTML。
系统能够处理任意 XML 模式,因此系统用户需要上传 Schema 和 XSLT。显然,这是一项只允许管理员级别用户执行的任务,但它也是一个相当大的靶心,所以我试图让它更安全。
我应该提到我们正在使用 Saxon 9.0 B
是否有任何标准方法来清理用户提供的 XSLT?到目前为止,我已经确定了三个可能的问题,尽管我意识到可能还有更多我根本没有想到的问题:
xsl:import 和 document() 函数可以访问服务器文件系统。使用自定义 URI 解析器很容易锁定,所以我很有信心我已经涵盖了这个
输出可以包含 javascript。我正在考虑使用类似 OWASP Anti-Samy 的东西来将允许的输出标签列入白名单。
XSLT 可以调用 java 函数。这是目前让我头疼的一个。我不想完全关闭该功能(尽管目前我什至看不到如何做到这一点),因为我们正在使用它。我首选的解决方案是能够锁定可接受的 java 命名空间,以便只能执行已知的安全函数。不过,我对其他建议持开放态度。
黄金标准将是一个标准库,它只处理所有已知的基于 XSLT 的漏洞,但是如果没有任何关于解决上面列出的问题(尤其是 3)的建议将非常受欢迎。
提前致谢