首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保存用户上传的图片最好的位置是哪里

保存用户上传的图片最好的位置是哪里
EN

Stack Overflow用户
提问于 2010-12-27 06:13:56
回答 5查看 13.2K关注 0票数 43

我有一个展示画廊的网站。用户可以从web上传他们自己的内容(通过输入URL),也可以通过从他们的计算机上传图片。

我将URL存储在数据库中,这对于第一个用例很好,但如果用户从他们的计算机进行上传,我需要弄清楚在哪里存储实际的图像。

这里有没有关于我应该把它们存储在哪里的建议或最佳实践?

我应该将它们保存在appdata还是content文件夹中?它们是否应该根本不存储在网站中,因为它是用户内容?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-27 06:31:52

您不应将用户上传的内容存储在站点结构中可由已知URL直接访问的任何地方。这是一个安全风险,因为用户可能会上传.htm文件和.js文件。即使是具有正确扩展名的文件也可能包含恶意代码,这些恶意代码可由经过身份验证的用户在您的站点上下文中执行,从而允许服务器端或客户端攻击。

例如,请参阅http://www.acunetix.com/websitesecurity/upload-forms-threat.htmWhat security issues appear when users can upload their own files?,它们提到了在允许用户上传文件并在您的站点中提供下载之前需要注意的一些问题。

structure

  • Don't
  1. 不要将文件放在正常的网站目录中,而要使用用户给你的原始文件名。您可以添加带有原始文件名的内容处置标头,以便他们可以以相同的文件名再次下载它,但是服务器上的路径和文件名不应该是用户可以influence.
  2. Don't信任图像文件的内容-调整图像文件的大小并仅提供调整大小的版本以供后续下载
  3. 不信任mime类型或文件扩展名,请打开文件并对其进行操作以确保它是其声明的内容。
  4. 限制上载大小和时间。
票数 67
EN

Stack Overflow用户

发布于 2011-10-17 23:37:37

根据您实现此类操作所需的资源,将所有这些内容存储在亚马逊S3中是非常有益的。

一旦你得到上传,你只需将它推送到亚马逊,并在数据库中弹出URL,就像你对其他图像所做的那样。如上所述,在发送之前打开图像并调整其大小可能是明智的。这既可以检查它实际上是一张图像,又可以确保您不会意外地向最终用户呈现完全相机分辨率的图像。

如果您曾经需要迁移/故障转移您的站点,并且不想同步千兆字节的映像资产,那么现在这样做将使它变得非常容易。

票数 9
EN

Stack Overflow用户

发布于 2011-10-11 21:08:58

一种方法是使用varbinary字段将图像存储在数据库表中。

另一种方法是将图像存储在App_Data文件夹中,并为每个用户创建一个子文件夹(~/App_Data/userid/myImage.png)。

对于这两种方法,您都需要创建一个单独的action方法,以便能够访问图像。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4535627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档