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

Cyr*_* N. 6 templates static-files

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

关于这个应用程序的语言,我用Django开始,我成功实现了"基于url名称的模板呈现,默认为回退"(http://someuser.example.com将在templates/someuser /中加载模板)*或在模板/通用/*中如果没有在第一个中找到).但是如果它们更适合我的需要,我可以将它导出到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. 静态文件也存在同样的问题

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

谢谢你的帮助,我感谢!

Cyr*_* N. 4

好吧,我会根据我所做的和我的研究来回答自己。

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

必须好好评估风险!

就我而言,让用户更改完整的 HTML/CSS/JS 是可能的,就像PosterousTumblr所做的那样。

风险是:

  • 用户可以添加 JavaScript 代码来收集其他用户的身份验证 cookie。这样做,该用户可以访问每个其他用户的管理部分的任何令牌身份验证。一个简单的解决方案是避免管理部分和用户网站之间出现交叉 cookie。
  • 用户可以尝试执行模板中的代码,例如 Python、PHP、Java、Ruby 等(无论其用途如何)。这里的解决方案是使用模板引擎,该引擎完全禁止使用代码,仅允许使用标签Jinja2 for python 非常适合这一点。

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

但是,如果您担心数据库可能有太多点击,则最后一个解决方案,又名“允许用户编辑模板(存储在文件中) ”,可能是可能的,如果:

  • 您确保用户无法访问他可以访问的模板目录的其他文件夹。您可以通过设置一个使用数据库进行用户访问的 FTP 服务器(例如带有 MySQL 的 ProFTPd)以及在其模板目录中对用户进行 chroot 来实现此目的。设置配额也非常重要,以避免您的用户使用他的模板目录作为库存设备;)

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