我们的networking开发者有一个需要接受file upload的项目。 我应该确保什么涵盖?

最近的一个项目需要我们的一个网站接受(login)用户的file upload(主要是图片和可能的video)。

什么是我们需要考虑的一些(通用)事物,检查,确保或计算,因为我们将此项目带入实际?

你需要注意:

  • 最大文件大小。 在很多情况下,这可以由Web开发人员完成。
  • 权限。 你想让每个用户都拥有自己的(虚拟或真实的)文件夹吗?
  • 你想让用户能够删除他们上传的文件,甚至看到他们? 他们应该能够至lessvalidation他们上传的文件。
  • 你想让用户下载文件以及上传? 根据您的设置,这可能会很棘手。
  • 确保上传文件夹不允许他们上去的目录树。
  • 你会扩展或其他标准限制文件? 你想确保你不会无意中build立一个“warez服务器”。 我知道这是为login用户,但任何安全性可以被打破在某种程度上。

这是我现在所能想到的。

要注意的一件大事是你想允许的最大文件大小。 确保您的服务器已configuration为允许上传足够满足您需求的文件。

另外,我强烈build议上传的目标文件夹位于应用程序的根文件夹结构之外。

以下是我过去记住的几个问题:

  • 内存使用情况 请确保您的过程正在将上载写入磁盘而不是内存。 对于ASP.NET,这将需要编写自己的HTTP处理程序。
  • 内容限制 ; 您的Web服务器和任何上游代理服务器或内容分析器将需要支持增加的内容长度。
  • 超时 ; 脚本,防火墙端口和代理应该configuration很长的超时时间,因为上传可能需要很长时间才能完成。

将每个上传的文件视为不可信,直到您certificate不正确为止。 病毒扫描他们的作品。

  • 最大文件大小,在MAX_FILE_SIZE客户端(如果您通过HTTP上传) 服务器处理步骤。

  • 考虑将上传的数据保存在一个单独的分区(通常将web服务器转储到/var/tmp ),以防止某人填写重要的东西。 你可能会考虑用-o noexec挂载这个分区的偏执狂步骤。

  • 上传的图片/video实际上是有效的数据。 有人可能会将二进制文件重命名为funtimes.jpg ,或者将RAR文件附加到图像的末尾。 隐写关注可能不在观察列表的顶部,但许多服务让用户通过它们来清洗数据。

我的快速清单你应该考虑一下:

1-应用程序,协议(ftp,secure ftp,http,webdav等)和configuration

如何上传文件? 是否有前端应用程序将pipe理它? 你将使用什么FTP服务器? 在这里没有正确的答案,你只是想提前弄清楚,以确保其余的项目是正确的。

2-authentication和用户pipe理

您需要确定凭据和身份validation如何工作。 不要允许匿名上传! 会有通用用户或指定用户吗? 谁来pipe理用户? 他们是通过应用程序,操作系统还是其他方式来控制的? 他们会被允许删除吗? 只有他们的文件,或者任何其他人?

3-文件位置和磁盘空间

你需要一个地方来放置这些文件。 这将成为一个永久性的位置,还是会有一个过程来“扫”到另一个位置? 每个用户会有一个单独的地方,还是只有一个地方? 每个文件会有一个最大大小? 你想限制允许的文件types吗?

只是在写file upload的时候遇到了一些东西:

确保清除或过滤上传文件的文件名。 (摆脱..,\和/和可能是一堆其他东西取决于您的操作系统)

不要以为文件名只有一个“扩展名”。 “report.doc.pdf”或“Makefile”

如果预计上传量很大,则可能需要担心连接速度慢的人(请记住,很多人使用的DSL上传速度相对较慢)。 他们可能经常遇到断线或超时。 上传大文件时,一些较旧的Web浏览器会超时。 您需要find一种方法来处理这个问题,或者检查上传是否成功完成。

将file upload到“安全”的地方。 在UNIX系统上,理想情况下这意味着设置了“noexec”的驱动器,以及上传的帐户上的磁盘配额,因此无法完全填充驱动器。

如果您将文件保存在具有自动文档索引的系统上(大多数桌面操作系统),请从该索引中排除存储的文件夹。 例如最近在Windows上有一个漏洞(索引一个不好的PDF),未来可能会有更多的漏洞。

在服务器上实施某种反病毒/恶意软件检测。 即使您正在接受所谓的“不可执行”文件types,这些文件中的可执行代码仍有可能利用缓冲区溢出漏洞。