题
在我的一个项目中,我的用户将拥有我网站({username} .example.org)的专用部分。在该子域中,我计划让他们轻松更改设计。我看了一些已经这样做的在线网站, tumblr, 后期 和 购物.
关于此应用程序的语言,我从Django开始 “基于URL名称的模板渲染,默认为后备” (http://someuser.example.com将在模板/someuser/*或模板/generic/*中加载模板,如果在第一个中找不到)。但是,如果它们更适合我的需求,我可以将其导出到PHP或Play!框架。
使用的模板引擎是 Jinja2, ,由于它与Django模板引擎一样简单,易于学习和安全(没有Python Coode可以(通常应该执行!))。
这是我发现的每个解决方案的优点。我真的很感谢您对此的想法以及您的想法,为什么。谢谢。
注意:用户将在HTML/CSS上有良好的知识。
更改VAR(例如标题颜色等)
优点:
- 简单且安全
缺点:
- 太有限了,想要个性化他的网站的用户将无法使用此解决方案这样做
仅上传CSS
优点:
- 简单地集成
- 安全的
缺点:
- 有限的
- 用户图像存储在哪里? (徽标,背景,一些梯度等)
允许用户编辑模板(存储在数据库中)
优点:
- 变化更重要
- 用户(几乎)可以自由地做他想做的任何事情(实现GA,FeedBurner等)
缺点:
- 他们在哪里放置静态文件(徽标,背景图像,一些特殊效果(渐变))?
- 模板存储在数据库中,该数据库需要为显示的每个页面提供更多SQL请求
允许用户编辑模板(存储在文件中)
优点:
- 变化更重要
- 用户(几乎)可以自由地做他想做的任何事情(实现GA,FeedBurner等)
- 可以启用FTP访问,从而将用户扎根于其模板dir中。
缺点:
- 静态文件的问题相同
另外,我卡住的位置是关于如何处理静态文件(图像,CSS,JS):我看不到如何在Apache(或Nginx)中定义一个apache(或nginx)中的虚拟霍斯特,以请求数据库查看哪个用户属于此url此URL 。
感谢您的帮助,我感谢!
解决方案
好的,我会根据我的工作和研究来回答自己。
正如史蒂夫(Steve)提到的那样,您必须非常谨慎,让用户自定义页面布局。
风险必须得到很好的评估!
就我而言,让用户更改完整的html/css/js是可能的 后期 或者 tumblr 做。
风险是:
- 用户可以添加一个JavaScript代码,该代码将收集其他用户的身份cookie。这样做,该用户可以访问彼此用户的管理员的任何代币验证。 一个简单的解决方案是避免管理部门和用户网站之间的交叉cookie。
- 用户可以尝试在模板中执行代码,例如Python,PHP,Java,Ruby等(关于使用的内容)。 这里的解决方案是使用完全禁止使用代码的模板引擎,仅标签. Jinja2 因为Python非常适合这一点。
如果对这两个条件进行了良好的评估,则选项“允许用户编辑模板(存储在数据库中)“是一个很好的解决方案。
但是,如果您担心数据库可能会有太多命中,那么最后一个解决方案,也就是“允许用户编辑模板(存储在文件中)”,如果:
- 您确保用户无法访问其他文件夹,即他可以访问的模板目录。 您可以这样做,例如设置使用数据库用于用户访问的FTP服务器(例如带有MySQL的PROFTPD),并在其模板dir中使用用户来调用用户。设置的配额也非常重要,以避免用户将其模板DIR用作Stockage设备;)
好吧,我认为我解决了整个问题。我可能会错过一些观点,如果是这样,请添加评论或新帖子,我将完成答案。