在我的网页中,我将允许客户端(X)HTML。为了避免使用XSS,我将使用HTML Purifier,并停用<script>
标记(以及其他一些危险标记)。
然而,我想让那些(X)HTML的设计者能够使用某些类似编程的功能,例如显示需要for循环的项目列表。
然后我提出了这样的想法:用户提交XSL代码,我向XML提供用户所需的数据。
由于HTML Purifier无法清理XSL代码(可以吗?),我建议的流程将是:
您认为上面的流程可以确保保存到数据库中的最终XSL代码是否干净(假设HTML Purifier是完美的)?
另一个问题是,(这是这里的主要问题),接受任意XSL代码并在服务器中通过PHP执行XSL转换是否安全?是否有任何安全漏洞,XSL代码中包含一些XSS,注入等,这对服务器或PHP程序有害?
最后,如果有任何其他想法/设计来实现这一点,欢迎任何解决方案!
答案 0 :(得分:4)
绝对不是。 XSL是Turing Complete,用户提交的XSL脚本至少可以耗尽所有CPU,最糟糕的是,在服务器上运行代码。
即使XSL有效,也绝对没有迹象表明单个测试输入上的运行并不意味着XSL无法在特制输入上产生XSS输出。
答案 1 :(得分:1)
允许用户提交自己的XSLT时要考虑的另一件事是XSLT文件本身就是XML文件,可能会对Billion Laughs(XML炸弹)攻击等开放。