哪里是保存用户上传图片的最佳地点
我有一个网站,显示画廊。 用户可以从networking上传自己的内容(通过inputurl),或从电脑上传图片。
我在第一个用例的数据库中存储的URL,但我需要找出如果用户从他们的计算机上传,存储实际图像的位置。
这里有什么build议或最佳做法,我应该在哪里存储这些?
我应该将它们保存在appdata或内容文件夹中吗? 他们是不是应该和网站一起存储,因为这是用户内容?
您不应该将用户上传的内容存储在您的站点结构中可以通过已知URL直接访问的任何地方。 这是一个安全风险,因为用户可以上传.htm文件和.js文件。 即使是具有正确扩展名的文件也可以包含恶意代码,这些恶意代码可以由经过身份validation的用户在网站上下文中执行,从而允许进行服务器端或客户端攻击。
请参阅http://www.acunetix.com/websitesecurity/upload-forms-threat.htm以及当用户可以上传自己的文件时出现什么安全问题?; 其中提到了在允许用户上传文件之前需要注意的一些问题,然后将它们呈现在您的网站中进行下载。
-
不要将这些文件放在正常的网站目录结构中
-
不要使用用户给你的原始文件名。 您可以使用原始文件名添加内容处置标题,以便可以将其重新下载为相同的文件名,但服务器上的path和文件名不应该是用户可以影响的内容。
-
不要相信图像文件 – 调整它们的大小,只提供重新调整后的版本
-
不要相信MIMEtypes或文件扩展名,打开文件并对其进行操作以确保它是自称的。
-
限制上传大小和时间。
根据资源你必须实现这样的东西,这是非常有益的存储所有这些东西在亚马逊S3。
一旦你获得了上传,你只需把它推到亚马逊和popup的数据库中的url,因为你正在处理其他图像。 如上所述,在发送图像之前打开图像并resize可能是明智的。 这两个检查它实际上是一个图像,并确保您不会意外地向最终用户呈现完整的相机分辨率图像。
如果您必须迁移/故障转移您的站点,并且不想同步千兆字节的图像资产,现在这样做会使事情变得更加容易。
一种方法是将图像存储在具有varbinary字段的数据库表中。
另一种方法是将图像存储在App_Data文件夹中,并为每个用户创build一个子文件夹(〜/ App_Data / [userid] /myImage.png)。
对于这两种方法,您都需要创build一个单独的操作方法,以便访问图像。
上传图片时,您需要在上传图片之前validation文件的内容。 文件扩展名方法不可信。
使用幻数方法来validation文件内容,这将是一个简单的方法。
请参阅stackoverflowpost ,看看幻数的列表
保存文件的一种方法是将其转换为二进制格式并保存在我们的数据库中,下一个方法是使用App_Data文件夹。
存储选项基于您的要求。 也看到这个post
通过将maxRequestLength属性设置为Web.Config来设置上传限制,如下所示,其中文件的大小以KB
<httpRuntime maxRequestLength="51200" executionTimeout="3600" />
您可以将您的可信数据保存在htdocs/www
文件夹中,以便任何用户都无法访问该文件夹。 你也可以在你信任的数据上添加.htaccessvalidation(对于.htaccess你应该保存你的.htpasswd文件并行的htdocs / www文件夹),如果你使用的是Apache。