【发布时间】:2026-01-29 03:55:01
【问题描述】:
在我的网页中,我将允许客户端 (X)HTML。为了避免 XSS,我将使用HTML Purifier,并禁用<script> 标签(以及其他一些危险标签)。
然而,我希望那些 (X)HTML 的设计者能够使用某些类似编程的功能,例如显示需要 for 循环的项目列表。
然后我想出了这样的想法:用户提交XSL代码,我向XML提供用户需要的数据。
由于 HTML Purifier 无法清理 XSL 代码(可以吗?),我建议的流程是:
- 用户提交一段 XSL 代码。
- 在服务器中,有一些示例数据(示例 XML)。 PHP 用于对这些示例 XML 数据进行 XSL 转换。
- 将输出 XHTML 传递给 HTML Purifier。如果 HTML Purifier 在代码中检测到任何被禁止的元素,则停止进程并向用户显示错误。
- 如果它通过了 HTML Purifier,请对照 W3C validator 检查它。 (这只是一个双重检查。HTML Purifier 的输出应该是有效的。)
- 将这段 XSL 代码保存到数据库中。在需要时使用(包括)它。
您认为上面的流程可以确保保存到数据库中的最终 XSL 代码是干净的(假设 HTML Purifier 是完美的)?
另一个问题是,(这是这里的主要问题),接受任意 XSL 代码并在服务器中通过 PHP 执行 XSL 转换是否安全? XSL代码中是否包含一些XSS、注入等安全漏洞,从而对服务器或PHP程序有害?
最后,如果有任何其他想法/设计来实现这一点,欢迎任何解决方案!
【问题讨论】:
-
@Mathias,感谢您的校对。请一起解决这个问题:D
-
如果你期望别人帮助你,至少接受他们迄今为止给出的答案。
-
你的答案是什么?
-
到目前为止,您已经问了许多其他问题,但很少接受答案——即使用户花时间制定了良好而全面的答案。
-
@MathiasMüller 感谢您的发现。让我尽快复习一下这个问题。
标签: php xslt xhtml htmlpurifier