PHP作为模板引擎存储在Mysql中 - 白名单函数

时间:2011-05-19 09:17:58

标签: php mysql template-engine whitelist

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

因为我想知道我是否可以使用PHP作为网络应用程序的模板引擎(用户可以自己更改布局) - 我仍然没有找到有关以下内容的任何信息:

  • 将模板存储在MYSQL数据库中
  • 评估他们
  • 但只包括列入白名单的功能(只允许他们访问一组有限的功能 - 而是,foreach等......)

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

3 个答案:

答案 0 :(得分:2)

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

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

在PHP中禁用所有潜在危险的函数是一项非常艰巨的任务,并且很容易搞砸。见Exploitable PHP functions

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这可能是一个非常困难的(但有趣的,如果你进入主题)任务,因为它涉及构建一个小的PHP解析器,它可以完美地识别任何函数调用或方法调用(因为如果你错过了一个,你'重新拧紧/黑客攻击/ ...)然后检查所有匹配的功能标识符令牌是否在您的白名单中,否则拒绝进行评估。要生成您的Parser,您可能需要查看PHP_ParserGenerator,但遗憾的是,它似乎不再被维护,或lemonPHP/JLexPHP,这可能是更新的,但您需要使用Java来生成解析器。

由于这一切都是一项相当繁琐的工作,大多数人都习惯使用自定义(伪造)模板语言,这种语言类似于PHP,但不完全相同。

流行的PHP模板引擎包括:

可以找到更多herehere