anonymous coward Asked: 2009-06-02 08:29:32 +0800 CST2009-06-02 08:29:32 +0800 CST 2009-06-02 08:29:32 +0800 CST 我们的网络开发人员有一个需要接受文件上传的项目。我应该确保涵盖什么? 772 最近的一个项目要求我们的一个网站接受来自(登录)用户的文件上传(主要是图像,可能还有一些视频)。 当我们将这个项目付诸实施时,我们需要考虑、检查、确保或计算哪些(通用)事情? website security upload web-server storage 8 个回答 Voted Best Answer Joshua Nurczyk 2009-06-02T08:39:13+08:002009-06-02T08:39:13+08:00 您需要注意: 最大文件大小。在许多情况下,这可以由 Web 开发人员完成。 权限。您是否希望每个用户都拥有自己的(虚拟或真实)文件夹,其他人无法看到? 您是否希望用户能够删除他们上传的文件,甚至可以看到它们?他们至少应该能够验证他们上传了哪些文件。 您想让用户下载文件和上传文件吗?根据您的设置,这可能很难实现。 确保上传文件夹不允许它们向上爬到目录树。 您会按扩展名或其他条件限制文件吗?您要确保不会无意中设置“warez 服务器”。我知道这是针对登录用户的,但任何安全性都可能以某种方式被破坏。 这就是我目前能想到的所有需要注意的地方。 squillman 2009-06-02T08:32:29+08:002009-06-02T08:32:29+08:00 需要注意的一件大事是您要允许的最大文件大小。确保您的服务器配置为允许上传足够大的文件以满足您的要求。 此外,我强烈建议上传的目标文件夹位于应用程序的根文件夹结构之外。 Doug Luxem 2009-06-02T08:36:18+08:002009-06-02T08:36:18+08:00 以下是我在过去这样做时记得的一些问题: 内存使用;确保您的进程正在将上传内容写入磁盘而不是内存。对于 ASP.NET,这需要编写自己的 HTTP 处理程序。 内容限制;您的 Web 服务器和任何上游代理服务器或内容分析器都需要支持增加的内容长度。 超时;脚本、防火墙端口和代理应配置为长时间超时,因为上传可能需要很长时间才能完成。 Maximus Minimus 2009-06-02T08:39:48+08:002009-06-02T08:39:48+08:00 除非您证明并非如此,否则将每个上传的文件视为不受信任。病毒扫描他们,作品。 hark 2009-06-02T08:40:49+08:002009-06-02T08:40:49+08:00 最大文件大小,在客户端上MAX_FILE_SIZE(如果您通过 HTTP 上传)和在服务器处理步骤期间。 考虑将上传的数据保存在单独的分区上(通常是网络服务器转储到/var/tmp),以防止有人填满重要的东西。您可能会考虑使用-o noexec. 上传的图像/视频实际上是有效数据。有人可能会将二进制文件重命名为funtimes.jpg,或将 RAR 文件附加到图像的末尾。隐写问题可能不在关注列表的首位,但许多服务允许用户通过它们清洗数据。 tomjedrz 2009-06-02T08:43:34+08:002009-06-02T08:43:34+08:00 我应该考虑的快速列表: 1- 应用程序、协议(ftp、安全 ftp、http、webdav 等)和配置 文件将如何上传?是否有一个可以管理它的前端应用程序?您将使用什么 ftp 服务器?这里没有正确的答案,您只是想提前弄清楚,以确保剩余的项目正确完成。 2-身份验证和用户管理 您需要决定凭据和身份验证的工作方式。不允许匿名上传! 会有通用用户还是命名用户?谁来管理用户?它们会通过应用程序、操作系统或其他方式进行控制吗?他们会被允许删除吗?只有他们的文件,还是其他任何人? 3-文件位置和磁盘空间 您需要一个放置文件的地方。这将是一个永久的位置,还是会有一个过程将它们“清扫”到另一个位置?每个用户会有一个单独的位置,还是只有一个位置?每个文件会有最大大小吗?您想限制允许的文件类型吗? Colin Coghill 2009-06-02T19:10:15+08:002009-06-02T19:10:15+08:00 只是我在编写文件上传时遇到的一些事情: 确保清理或过滤上传文件的文件名。(摆脱 .., \ 和 / 可能还有一堆其他的东西,这取决于你的操作系统) 不要假设文件名只有一个“扩展名”。“report.doc.pdf”或“Makefile” 如果预计上传量很大,您可能需要担心连接速度较慢的人(请记住,很多人使用 DSL,通常上行速度相对较慢)。他们可能会经常遇到断开连接或超时。一些较旧的网络浏览器在上传大文件时会超时。您需要找到一种方法来处理这个问题,或者检查上传是否成功完成。 将文件上传到“安全”的地方。在 UNIX 系统上,理想情况下,这意味着驱动器设置了“noexec”,并且正在上传的帐户具有磁盘配额,因此它不能完全填满驱动器。 如果您将文件保存在具有自动文档索引的系统(大多数桌面操作系统)上,请从该索引中排除它们存储的文件夹。例如,最近在 Windows 中出现了漏洞(索引错误的 PDF),未来可能还会有更多。 Chris W. Rea 2009-06-02T08:40:26+08:002009-06-02T08:40:26+08:00 在服务器上实施某种防病毒/恶意软件检测。即使您接受所谓的“不可执行”文件类型,这些文件中仍然存在利用缓冲区溢出漏洞的可执行代码的可能性。
您需要注意:
这就是我目前能想到的所有需要注意的地方。
需要注意的一件大事是您要允许的最大文件大小。确保您的服务器配置为允许上传足够大的文件以满足您的要求。
此外,我强烈建议上传的目标文件夹位于应用程序的根文件夹结构之外。
以下是我在过去这样做时记得的一些问题:
除非您证明并非如此,否则将每个上传的文件视为不受信任。病毒扫描他们,作品。
最大文件大小,在客户端上
MAX_FILE_SIZE
(如果您通过 HTTP 上传)和在服务器处理步骤期间。考虑将上传的数据保存在单独的分区上(通常是网络服务器转储到
/var/tmp
),以防止有人填满重要的东西。您可能会考虑使用-o noexec
.上传的图像/视频实际上是有效数据。有人可能会将二进制文件重命名为
funtimes.jpg
,或将 RAR 文件附加到图像的末尾。隐写问题可能不在关注列表的首位,但许多服务允许用户通过它们清洗数据。我应该考虑的快速列表:
1- 应用程序、协议(ftp、安全 ftp、http、webdav 等)和配置
文件将如何上传?是否有一个可以管理它的前端应用程序?您将使用什么 ftp 服务器?这里没有正确的答案,您只是想提前弄清楚,以确保剩余的项目正确完成。
2-身份验证和用户管理
您需要决定凭据和身份验证的工作方式。不允许匿名上传! 会有通用用户还是命名用户?谁来管理用户?它们会通过应用程序、操作系统或其他方式进行控制吗?他们会被允许删除吗?只有他们的文件,还是其他任何人?
3-文件位置和磁盘空间
您需要一个放置文件的地方。这将是一个永久的位置,还是会有一个过程将它们“清扫”到另一个位置?每个用户会有一个单独的位置,还是只有一个位置?每个文件会有最大大小吗?您想限制允许的文件类型吗?
只是我在编写文件上传时遇到的一些事情:
确保清理或过滤上传文件的文件名。(摆脱 .., \ 和 / 可能还有一堆其他的东西,这取决于你的操作系统)
不要假设文件名只有一个“扩展名”。“report.doc.pdf”或“Makefile”
如果预计上传量很大,您可能需要担心连接速度较慢的人(请记住,很多人使用 DSL,通常上行速度相对较慢)。他们可能会经常遇到断开连接或超时。一些较旧的网络浏览器在上传大文件时会超时。您需要找到一种方法来处理这个问题,或者检查上传是否成功完成。
将文件上传到“安全”的地方。在 UNIX 系统上,理想情况下,这意味着驱动器设置了“noexec”,并且正在上传的帐户具有磁盘配额,因此它不能完全填满驱动器。
如果您将文件保存在具有自动文档索引的系统(大多数桌面操作系统)上,请从该索引中排除它们存储的文件夹。例如,最近在 Windows 中出现了漏洞(索引错误的 PDF),未来可能还会有更多。
在服务器上实施某种防病毒/恶意软件检测。即使您接受所谓的“不可执行”文件类型,这些文件中仍然存在利用缓冲区溢出漏洞的可执行代码的可能性。