6

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

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

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

这是我找到的每个解决方案的优缺点。我非常感谢您对此的想法以及您将采取哪种方式,为什么。谢谢。

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

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

  • 优点:

    1. 简单安全
  • 缺点:

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

只上传 CSS

  • 优点:

    1. 易于集成
    2. 安全的
  • 缺点:

    1. 有限的
    2. 用户图像存储在哪里?(标志、背景、一些渐变等)

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

  • 优点:

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

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

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

  • 优点:

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

    1. 静态文件同样的问题

另外,我卡住的地方是关于如何处理静态文件(图像、css、js):我看不到如何在 Apache(或 NGinx)中定义一个 VirtualHost,它会请求数据库查看哪些用户属于这个 url .

感谢您的帮助,我很感激!

4

1 回答 1

4

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

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

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

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

风险是:

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

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

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

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

好吧,我想我涵盖了整个问题。我可能会错过一些观点,如果是这种情况,请添加评论或新帖子,我会完成答案。

于 2011-05-20T07:33:54.710 回答