7

我正在使用单独的数据库多租户架构构建 MVC4 应用程序。客户还可以选择上传文件(通常大小为 1-5MB,文本文件/文档)。

我得出的结论是,最好将文件存储在文件系统中,同时将元数据保存在数据库中(每个客户的单独文件夹),但是,我不知道在哪里存储文件。MVC 对此有特殊的位置吗?或者我应该只是在服务器上的某个地方创建一个文件夹。

默认情况下创建这样的文件夹是否安全?

谢谢!

4

2 回答 2

10

好吧,我想就以下几点提出建议,Gitzerai 已经考虑了很多。

Gitzerai 也许你会在这里找到你在为你的应用程序创建解决方案时错过的东西。

反正,

您可以在文件系统上上传文件,但有几件事需要注意。

  • 确保运行 IIS 应用程序池的帐户仅对该文件夹具有读写权限,并且在任何情况下都不会执行

  • 检查文件扩展名并禁止和可执行文件(.exe、.dll 等)

  • 存储不带扩展名或带有一些 .zzz 扩展名的文件以防万一。当用户需要下载文件时,您可以动态设置为原始扩展名

  • 仅使用一个文件夹来存储手动创建的所有文件。如果不是真的需要,避免动态创建多个文件夹

  • 创建一个单独的应用程序,该应用程序偶尔会对数据库中的记录和文件系统中的文件进行完整性检查

于 2013-10-17T10:49:02.950 回答
5

就个人而言,我会说这样的决定应该基于您的应用程序要求。

当我构建具有上传可能性的简单应用程序时,我总是使用 DB = Metadata; 文件本身 = 文件系统,因为我为每个应用程序都实现了一个模块,这是一种易于维护的方法。它可能会带来安全问题,特别是对于多用户/应用程序访问服务器,其中“文件夹访问”的安全性应该在根文件夹级别维护,并严格定义权限(不是 chmod 777 所有人 :-))到目前为止我还没有这种方法有一个问题。外部访问由特定文件的外部 guid 链接。

对于多租户环境,我的文件数据库(或者我称之为媒体数据库)还包含 CDN url,即物理托管文件的服务器地址,并且文件由 HttpHandler 提供服务。同样,我可以想象更安全和更灵活的方式,但到目前为止这从未让我失望,而且我知道它伴随这个解决方案的问题,我对此很好。

但由于这对我来说是一个有趣的话题,我很想听听是否有人提出不同的解决方案,当涉及到文件存储时。

于 2013-10-16T11:57:20.820 回答