2011-05-19 69 views
0

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

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

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

任何人都在寻找相同的解决方案,但可以添加更多信息?那会很好。

+1

哇,这对我来说似乎很危险......您需要一些关于PHP的认真知识,以确保您的PHP白名单中没有流量。 – 2011-05-19 09:20:35

+0

这里是一个可利用的函数列表:http://stackoverflow.com/questions/3115559/ – JohnP 2011-05-19 09:21:11

+0

哦,你有你的“认真的PHP知识”:p ...但你确定你可以相信任何人有完美的名单(我知道我不会)。 – 2011-05-19 09:24:33

回答

2

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

注意,像Smarty的许多模板语言提供了代码执行的功能,以及。您可能需要禁用引擎配置中的那些。

禁止在PHP的所有潜在危险的功能是一个非常艰巨的任务,而且容易搞砸了。见Exploitable PHP functions

+0

枝条也可能有趣,或者。现在Smarty似乎不太可取。 – Evert 2011-05-19 10:39:28

1

PHP是不适合作为你的目的的模板引擎。你应该使用一个适当的模板引擎和沙箱支持:Twig

0

这可能是一个相当困难的(但有趣的,如果你是主题)任务,因为它涉及到构建一个小的PHP解析器,它可以完美地识别任何函数调用或方法调用(因为如果你错过了一个, '拧紧/黑客入侵/ ...),然后检查所有匹配的功能标识符标记是否在您的白名单中,否则将拒绝评估。为了生成解析器,你可能要检查出PHP_ParserGenerator,不幸的是似乎没有再被维持,或lemonPHP/JLexPHP,这可能是更最新的,但你需要使用Java来生成解析器。由于所有这些都是一项非常单调乏味的工作,因此大多数人都会使用自定义(制作好的)模板语言,这与PHP类似,但并不完全相同。

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

更可以发现herehere

+0

这个问题链接到这个问题:D – NikiC 2011-05-19 09:30:58

+0

该死的,错误的链接,让我解决这个问题:D – fresskoma 2011-05-19 09:33:25