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

时间:2011-04-27 06:35:19

标签: templates static-files

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

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

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

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

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

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

  • 优点:

    1. 简单&安全
  • 缺点:

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

仅上传CSS

  • 优点:

    1. 易于整合
    2. 安全
  • 缺点:

    1. 有限公司
    2. 存储用户图像的位置? (标志,背景,一些渐变等)

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

  • 优点:

    1. 更改更重要
    2. 用户(几乎)可以自由地做任何他想做的事情(实现GA,FeedBurner等)
  • 缺点:

    1. 他们把静态文件放在哪里(logo,background-image,一些特效(渐变))?
    2. 模板存储在数据库中,对于每个显示的页面需要多一个SQL请求

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

  • 优点:

    1. 更改更重要
    2. 用户(几乎)可以自由地做任何他想做的事情(实现GA,FeedBurner等)
    3. 可以启用FTP访问,在用户的模板目录中生根。
  • 缺点:

    1. 静态文件的相同问题

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

感谢您的帮助,我感谢!

1 个答案:

答案 0 :(得分:4)

好的,我会根据自己的所作所为以及我的研究来回答自己。

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

必须对风险进行充分评估!

就我而言,允许用户更改完整的HTML / CSS / JS是可行的,例如PosterousTumblr

风险是:

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

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

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

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

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