-->

PHP作为存储在MySQL模板引擎 - 白名单功能(PHP as template engine s

2019-10-28 09:33发布

虽然我一直在读通过关于使用PHP作为模板引擎(使用输出缓冲)无数的帖子,我还在努力做一个案例吧。

因为我想,如果我可以使用PHP作为一个web应用程序模板引擎(用户将能够改变布局本身) - 我仍然没有找到关于以下的任何信息:

  • 存储模板在MySQL数据库
  • 他们EVAL
  • 但只包括被列入白名单功能(给他们只有有限的一组功能的访问 - 同时,的foreach,等...)

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

Answer 1:

如果你不能信任用户编辑模板,你是关闭使用单独的模板语言更好。

需要注意的是像Smarty的许多模板语言提供了代码执行的功能,以及。 您可能需要禁用这些发动机的配置。

禁用于PHP所有潜在危险的功能是一个非常艰巨的任务,而且容易搞砸了。 见可开发PHP函数



Answer 2:

PHP是不适合作为你的目的的模板引擎。 您应该使用正确的模板引擎,沙箱这种支持: 枝杈 。



Answer 3:

这可能是一个相当困难的(但很有趣,如果你是进入专题)的任务,因为它涉及到建设一个小型PHP解析器,它可以完美地识别任何函数调用或方法调用(因为如果你错过了一个,你就完蛋了/砍死/ ...),然后检查是否所有的匹配功能标识符令牌是在您的白名单,否则拒绝EVAL-ING。 为了生成解析器,你可能要检查出PHP_ParserGenerator ,不幸的是似乎没有再被维持,或lemonPHP / JLexPHP ,这可能是更最新的,但你需要使用Java来生成解析器。

因为这一切是一个相当繁琐的任务,大多数人诉诸使用自定义的(虚构的)模板语言,这是类似PHP,但不完全相同。

流行的PHP模板引擎,其中包括:

  • Smarty的
  • 枝条
  • PEAR模板引擎
  • 学者

更可以发现这里和这里



文章来源: PHP as template engine stored in Mysql - Whitelist Functions