【问题标题】:Better way to store image in JSF在 JSF 中存储图像的更好方法
【发布时间】:2014-12-20 07:33:50
【问题描述】:

首先,我使用以下工具:Java、JSF 2、Primefaces、JPA/Hibernate、PostgreSQL、Maven、Spring Framework。

我有一个大约有 100.000 行的表,并且可以增长更多。每条记录可以附加 1,2 或 3 张图像,因此我可以拥有大约 300.000 张应该由系统处理的图像。问题是我需要一个具有性能和安全性的最佳解决方案,但我找不到它。看看我的正面和负面的建议:

1ª - 将图像存储在如下目录中:'/usr/local/share/images_system_a/' 并仅将 imagem 的链接保存在表中。 PERFORMANCE (GREAT):这对 PERFORMANCE 来说非常有用,因为我不需要从数据库加载 10MB 的大图像,我只需从目录中获取图像。 SECURITY (BAD): 这对 SECURITY 不利,因为用户在任何时候都可以“清理”此目录,并且应用程序的所有图像都将丢失。

2ª - 将图像保存在表格中。 性能(不良):我认为这对性能非常不利,因为加载非常大的图像会锁定应用程序,我不能让这种情况发生。 安全(极好): 使用表格内的图像我感觉更安全,因为只有授权人员(我)有权在数据库中创建任何 DML 或 DDL,并且我可以使用 crontab 备份数据库(每天) 以进一步确保数据的安全性。

所以,我的大问题是我无法协调性能和安全性,我需要两者。希望有人能给我更好的建议。

【问题讨论】:

  • 1.为什么要把它们放在用户的地方。 2. 对文件夹设置一些权限,这样用户在没有管理员权限的情况下不能删除它们。
  • 这只是一个例子,我可以放在任何地方,但无论如何用户都可以清理(RM)这个目录。我需要保护这个目录不受所有人的影响,即使是管理员,但我做不到。
  • 第一件事如果这个数据被放置在远程机器上,用户只能访问数据而不是整个文件系统共享给用户,所以在你允许之前没有人可以直接访问远程机器的文件系统。您还可以为用户设置权限/规则,不允许他们访问您想要保护的数据
  • 机器是本地的,不是远程的。确保安全的唯一方法是为此目录设置一个特殊用户。那么,更好的解决方案是(1)对你来说?
  • 好吧,如果用户可以删除图像文件,那么没有什么能阻止他删除数据库文件,所以在这个设置中,选项 1 的安全性 = 选项 2 的安全性。

标签: java hibernate postgresql jsf primefaces


【解决方案1】:

这对安全性不利,因为任何时候用户都可以“清理”该目录,并且应用程序的所有图像都将丢失。

为什么单个 用户能够鞭打您的图片上传目录?这似乎更像是一个错误的概念,这是一个实际问题?!

如果用户点击“删除我的文件” - 您只需从数据库中获取已上传文件的链接,然后然后从您的上传文件夹中删除相关文件。这不会对其他用户的图像产生任何影响。

您说的是基于 Web 的应用程序 - 为什么 ANY 用户可以直接访问 ANY 文件夹?


我经常看到,人们会在数据库中存储文件。这可能有一些优势,因为您不需要同步状态,但毕竟我更喜欢传统方式:

  • 数据库用于数据
  • 文件系统用于文件。

但对此没有统一的答案。将其存储在数据库中可能会提供优势是有原因的 - 但最后:安全不应该成为任何问题 案例。

【讨论】:

  • 感谢您的回答。正如您所说,我会认为在我的情况下,更好的解决方案是将文件存储在文件系统中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2019-12-17
  • 1970-01-01
  • 2013-11-12
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多