允许用户更改模板的最佳方法是什么?

在我的一个项目中,我的用户将拥有我网站的专用部分({username} .example.org).在该子域中,我计划允许他们轻松更改设计.
我看了一下已经做过的在线网站,比如Tumblr,PosterousShopify.

关于这个应用程序的语言,我用Django开始,我成功实现了“基于url名称的模板呈现,默认为回退”(http://someuser.example.com将在templates / someuser /中加载模板) *或在模板/通用/ *中如果没有在第一个中找到).
但是如果它们更适合我的需要,我可以将它导出到PHP或Play!Framework.

使用的模板引擎是Jinja2,因为它像Django模板引擎一样简单,易于学习和安全(没有Python coode可以(通常应该!)执行).

以下是我发现的每种解决方案的优缺点.我真的很感激你对此的看法以及你会采取哪种方式,为什么.谢谢.

注意:用户将对HTML / CSS有很好的了解.

改变变量(如标题颜色等)

>优点:

>简单&安全

>缺点:

>太有限了,想要个性化他的网站的用户将无法使用此解决方案

只上传CSS

>优点:

>易于集成
>安全

>缺点:

>有限
>存储用户图像的位置? (徽标,背景,一些渐变等)

允许用户编辑模板(存储在数据库中)

>优点:

>变化更重要
>用户(几乎)可以自由地做任何他想做的事情(实现GA,FeedBurner等)

>缺点:

>他们在哪里放置静态文件(徽标,背景图像,一些特殊效果(渐变))?
>模板存储在数据库中,对于每个显示的页面,需要多一个SQL请求

允许用户编辑模板(存储在文件中)

>优点:

>变化更重要
>用户(几乎)可以自由地做任何他想做的事情(实现GA,FeedBurner等)
>可以启用FTP访问,在用户的模板目录中生根.

>缺点:

>静态文件也存在同样的问题

另外,我遇​​到的问题是如何处理静态文件(图像,css,js):我看不到如何在Apache(或NGinx)中定义一个虚拟主机,它会请求数据库查看哪个用户属于这个网址.

谢谢你的帮助,我感谢!

最佳答案
好的,我会根据自己的所作所为和自己的研究来回答自己.

正如史蒂夫所提到的,你必须非常小心让用户自定义页面布局.

风险必须得到很好的评估!

就我而言,让用户更改完整的HTML / CSS / JS是可行的,比如PosterousTumblr.

风险是:

>用户可以添加一个javascript代码,用于收集其他用户的auth cookie.这样,该用户可以访问每个其他用户的管理员部分的任何令牌身份验证.一个简单的解决方案是避免管理部分和用户网站之间的交叉cookie.
>用户可以尝试在模板中执行代码,如Python,PHP,Java,Ruby等(关于它的用途).这里的解决方案是使用模板引擎,完全不允许使用代码,只允许使用标签. Jinja2 for python非常适合.

如果对这两个条件进行了很好的评估,则“允许用户编辑模板(存储在数据库中)”选项是一个很好的解决方案.

但是如果你担心数据库可能有太多的命中,那么最后的解决方案,即“允许用户编辑模板(存储在文件中)”,如果符合以下条件,则是可能的:

>您确保用户无法访问他可以访问的模板目录的其他文件夹.你可以这样做,比如设置一个使用数据库进行用户访问的FTP服务器(比如ProFTPd with MySQL),并在他的模板目录中chroot用户.配置也是非常重要的设置,以避免您的用户使用他的模板目录作为库存设备;)

好吧,我想我已经涵盖了整个问题.我可能会错过一些积分,如果是这样,请添加评论或新帖子,我将完成答案.

转载注明原文:允许用户更改模板的最佳方法是什么? - 代码日志