我正在尝试为自己的项目创建自己的框架,我希望人们将他们的配置文件的主题上传到数据库。让他们以他们的帐户的外观和感觉为主题。
我首先想到的是服务器上的文件。
用户将登录并且PHP将获取其用户ID和其他misc详细信息,并将URL路由到其特定文件夹并提供该文件夹中的文件。
一个例子是
的真实目录http://www.foo.bar/users/me/style.css
http://www.foo.bar/users/me/script.js
http://www.foo.bar/users/me/index.tpl
http://www.foo.bar/users/me/otherPage.tpl
然后我在想哇,想象一下,如果我有100个用户?然后我的服务器上的用户目录中有100个文件夹,更不用说整个地方的重复文件占用空间了。好吧,虽然这可能是获取文件的禁食方式,但是从数据库加载标记可能不是一个坏主意吗?
我的服务器看起来更干净,但现在我的数据库会比我想要的查询得多。
然后我认为主要问题是拥有特定于用户的文件。例如,样式表可能包含带图像的背景URL,因此现在需要将这些图像链接到服务器上的实际路径。这让我回到为每个用户提供一个专用文件夹来存放他们的主题特定文件。
我如何安全有效地找到一种方法让用户上传主题,并保存所有文件图像,pdf,文档等,所有文件都没有被其他帐户持有人访问或通过简单的黑客技术从中提取文件属于另一个用户的服务器。
我想到的一个解决方案是只让登录视图文件的用户向文件追加一个唯一标记,如果标记与会话变量匹配,该标记将允许用户查看该文件。但是如果用户想要与另一个人共享该文件会怎么样,那么标记该文件会使我回到正方形1,安全事件不允许查看该文件,因为他们不是授权用户。
在任何情况下,最好的做法是将我的一些关注点放在正确的道路上。
P.S。 我选择这些标签是因为在我的解决方案中,我认为他们会涉及其中的一些方面。
答案 0 :(得分:0)
您可以将html或css存储在表格行中,但请务必清理数据以避免黑客攻击或注入。最简单的方法是让用户将代码粘贴到文本区域或字段中。如果您想让他们上传文件,您需要编写一个脚本来解析上传文件中的数据。这更复杂,因为您必须管理所有过滤和清理,同时从文件中提取数据并将其保存到数据库中。
答案 1 :(得分:0)
我们将CMS用于与多个客户和他们自己的用户合作。但是,与其给予他们更改页面的任何区域或样式的可能性,我们允许某些区域,例如:
然后我们将它们存储在数据库中,并通过动态样式表提供它们(我知道它们不会缓存,但它比拥有数百个文件更好)。
我知道MySpace过去常常让你上传一大堆HTML和CSS(不确定它们是否仍然存在),但这是一个安全噩梦,因为XSS的潜力很大。
如果您要让他们添加自己的自定义HTML和完整主题,您可能需要查看HTML Purifier - > http://www.htmlpurifier.org