虽然我已经阅读了无数关于使用 PHP 作为模板引擎(使用输出缓冲)的帖子,但我仍在尝试为它提供一个案例。
我想知道是否可以将 PHP 用作 Web 应用程序的模板引擎(用户将能够自己更改布局)——我仍然没有找到有关以下内容的任何信息:
- 将模板存储在 MYSQL 数据库中
- 评估他们
- 但只包括列入白名单的函数(让他们只能访问一组有限的函数——while、foreach 等......)
任何人都在寻找相同的解决方案,但可以提供更多信息吗?那将是相当不错的。
虽然我已经阅读了无数关于使用 PHP 作为模板引擎(使用输出缓冲)的帖子,但我仍在尝试为它提供一个案例。
我想知道是否可以将 PHP 用作 Web 应用程序的模板引擎(用户将能够自己更改布局)——我仍然没有找到有关以下内容的任何信息:
任何人都在寻找相同的解决方案,但可以提供更多信息吗?那将是相当不错的。
如果您不能信任编辑模板的用户,最好使用单独的模板语言。
请注意,许多模板语言(如 Smarty)也提供代码执行功能。您可能需要禁用引擎配置中的那些。
在 PHP 中禁用所有潜在危险的函数是一项非常艰巨的任务,而且很容易搞砸。请参阅 可利用的 PHP 函数
PHP 不适合作为模板引擎来满足您的目的。您应该为此使用具有沙盒支持的适当模板引擎:Twig。
这可能是一项相当困难(但很有趣,如果您进入该主题)的任务,因为它涉及构建一个小型 PHP 解析器,它可以完美地识别任何函数调用或方法调用(因为如果你错过了一个,你就完蛋了/ hacked/...) 然后检查是否所有匹配的函数标识符令牌都在您的白名单中,否则拒绝评估。为了生成您的解析器,您可能需要查看PHP_ParserGenerator,不幸的是它似乎不再维护,或者柠檬PHP/JLexPHP,它可能是最新的,但您需要使用 Java 来生成解析器。
由于所有这些都是一项相当乏味的任务,大多数人都求助于使用自定义(组成)模板语言,它类似于 PHP,但不完全相同。
流行的 PHP 模板引擎包括: