最近的一个项目需要我们的一个网站接受(login)用户的file upload(主要是图片和可能的video)。
什么是我们需要考虑的一些(通用)事物,检查,确保或计算,因为我们将此项目带入实际?
你需要注意:
这是我现在所能想到的。
要注意的一件大事是你想允许的最大文件大小。 确保您的服务器已configuration为允许上传足够满足您需求的文件。
另外,我强烈build议上传的目标文件夹位于应用程序的根文件夹结构之外。
以下是我过去记住的几个问题:
将每个上传的文件视为不可信,直到您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,这些文件中的可执行代码仍有可能利用缓冲区溢出漏洞。