2010-04-01 67 views
3

(总结:我的用户需要能够编辑其动态生成的网页的结构,而不会造成任何损害。)什么是适合PHP的安全模板系统?

问候,女士们,先生们。我目前正在制定一项服务,让来自特定人群的客户可以创建特定类型的网站并用自己的内容填充该网站。该系统是用PHP编写的。

许多该系统的用户希望编辑其特定的网站看起来如何,或者更常见的是,有一个设计师为他们做。编辑CSS很好,很花哨,但有时这还不够。有时候他们想通过编辑动态创建的网页的原始HTML来混洗整个页面结构。

由WordPress所使用的模板系统,据我所看到的,适合我的使用。除了一件非常重要的事情。除了能够编辑评论的显示方式或菜单的位置外,编辑模板的人员还可以让该模板执行任意PHP代码。

由于相同的代码运行所有这些不同的地点,在同一DATABSE的所有内容,可以让我的用户运行任意代码显然是出了问题。

所以我需要的是一个笨拙的白痴模板系统,我的用户可以自己编辑大部分页面结构,在任何地方拉动动态部分,甚至无法回应1 + 1 ;。

遵守以下伪代码:

<!DOCTYPE html> 
<title><!-- $title --></title> 
<!-- header() --> 
<!-- menu() --> 
<div>Some random custom crap added by the user.</div> 
<!-- page_content() --> 

这就是我想答应我的用户权力的程度。他们不需要做自己的循环或计算或任何事情。只包括我的变量和功能,剩下的给我。

我敢肯定,我不是这个星球上唯一的人需要这样的事情。你知道我可以使用的任何现成的模板系统吗?

在此先感谢您的答复。

+0

什么你正在寻找真正看起来很简单,为您自己打造,如果你没有找到的东西,可以为你做。说实话,考虑到你所需要的有限功能,这可能比试图从smarty或wordpress等特性中剥离功能更容易。 – Cam 2010-04-01 03:08:37

回答

5

我推荐的树枝。

http://www.twig-project.org/

特殊性它的沙盒模式。

安全: Twig具有沙盒模式来评估不可信的模板代码。这使得Twig可以用作用户可以修改模板设计的应用程序的模板语言。

只要你的例子非常简单,为什么不写一个简单的类来解析你的模板呢?我认为实际上并没有什么比您要求维护和分发的超级简单,因为写出来做这件事并不难。

我唯一能想到的其他东西可能是胡子吗?虽然我认为这是PHP开发的早期阶段,但我不确定它目前的稳定性或可用性。

http://github.com/bobthecow/mustache.php

4

你为什么不使用Smarty的?

http://www.smarty.net/

有一个security功能与定制settings设计正是你需要的,通过第三方进行编辑。

你可以做的另一种方式是净化输入,当他们做出改变,以确保他们没有包括任何不当

+0

借调,Smarty太棒了。 – 2010-04-01 02:51:03

+0

Smarty的确满足了我最重要的要求: “安全性:模板不包含PHP代码。因此,模板设计人员并没有充分发挥PHP的强大功能,但只有程序员提供给他们的功能子集(应用程序代码)。“ 非常感谢您的建议。 但它还包含我不需要的一百万个功能,并且不希望包含这些功能。 也许我可以把我所关心的部分拉出来。 – Wilhelm 2010-04-01 02:53:02

+0

那么你可以使用取消注册功能删除你不想要的任何功能: http://www.smarty.net/manual/en/api.unregister.function.php 如果你检查手册,那里是一个包含模板函数的列表,你可以添加一个小数组和一个循环来使用unregister函数从基本的php文件中删除它们。 – Cetra 2010-04-01 02:57:40

1

http://dwoo.org/

Dwoo是于2008年年初开始的创意来自一个事实,即Smarty的,一个众所周知的模板引擎,是年纪越来越大来了一个PHP5模板引擎。它承载了它的年龄的重要性,旧功能与新功能不一致,是为PHP4编写的,其面向对象方面没有利用PHP5在该领域更先进的功能等。因此Dwoo诞生了,希望能够提供更新,更强大的引擎。到目前为止,它已经被证明比Smarty更快,并且它提供了一个兼容层,允许多年来一直在使用Smarty的开发人员逐步将其应用程序切换到Dwoo。

0

<!-- $title --><!-- header() -->有什么区别?
为什么不把它做成同样的风格,然后只做<!-- $header -->简单的str_replace?