0

虽然我已经阅读了无数关于使用 PHP 作为模板引擎(使用输出缓冲)的帖子,但我仍在尝试为它提供一个案例。

我想知道是否可以将 PHP 用作 Web 应用程序的模板引擎(用户将能够自己更改布局)——我仍然没有找到有关以下内容的任何信息:

  • 将模板存储在 MYSQL 数据库中
  • 评估他们
  • 但只包括列入白名单的函数(让他们只能访问一组有限的函数——while、foreach 等......)

任何人都在寻找相同的解决方案,但可以提供更多信息吗?那将是相当不错的。

4

3 回答 3

2

如果您不能信任编辑模板的用户,最好使用单独的模板语言。

请注意,许多模板语言(如 Smarty)也提供代码执行功能。您可能需要禁用引擎配置中的那些。

在 PHP 中禁用所有潜在危险的函数是一项非常艰巨的任务,而且很容易搞砸。请参阅 可利用的 PHP 函数

于 2011-05-19T09:23:05.183 回答
1

PHP 不适合作为模板引擎来满足您的目的。您应该为此使用具有沙盒支持的适当模板引擎:Twig

于 2011-05-19T09:25:17.030 回答
0

这可能是一项相当困难(但很有趣,如果您进入该主题)的任务,因为它涉及构建一个小型 PHP 解析器,它可以完美地识别任何函数调用或方法调用(因为如果你错过了一个,你就完蛋了/ hacked/...) 然后检查是否所有匹配的函数标识符令牌都在您的白名单中,否则拒绝评估。为了生成您的解析器,您可能需要查看PHP_ParserGenerator,不幸的是它似乎不再维护,或者柠檬PHP/JLexPHP,它可能是最新的,但您需要使用 Java 来生成解析器。

由于所有这些都是一项相当乏味的任务,大多数人都求助于使用自定义(组成)模板语言,它类似于 PHP,但不完全相同。

流行的 PHP 模板引擎包括:

更多可以在这里这里找到

于 2011-05-19T09:27:59.553 回答