在泽西岛 REST API 中上传期间,我应该限制文件名的长度吗?



当用户上传文件时,有一些明显的验证,例如: 限制文件大小,检查文件扩展名是否可以接受等。

我想知道限制文件名中的字符数是否有任何好处?例如,用户无法将文件上传到包含 10000 个字符的后端 API。是否有任何用处,或者这是否被认为是不必要的检查?

multipart/form-data上的filename参数只是建议的文件名。因此,无需任何验证。

但是,如果要使用此建议的名称在服务器上创建本地文件,则必须考虑一些重要的注意事项:

  • 丢弃文件名上可能存在的任何路径信息。
  • 文件名不与现有本地文件冲突
  • 当然,还有服务器文件系统的最大文件名长度

引用多部分/表单数据的当前规范 (RFC 7578(

如果提供了"文件名"参数,则要求 [RFC2183]第2.3节中关于"接收MUA"(即接收MUA((即接收 邮件用户代理(也适用于多部分/表单数据的接收者: 不要盲目使用文件名,检查并可能更改以匹配 本地文件系统约定(如果适用(,并且不使用目录 可能存在的路径信息。

引用的 RFC 2183 第 2.3 节有更详细的解释,第 5 节详细介绍了一些安全协议:

由于此备忘录为发件人提供了一种建议文件名的方法, 接收 MUA 必须注意发件人建议的文件名 不代表危险。以UNIX为例,存在一些危害 将:

  • 创建启动文件(例如,".login"(。

  • 创建或覆盖系统文件(例如,"/etc/passwd"(。

  • 覆盖任何现有文件。

  • 将可执行文件放入任何命令搜索路径(例如,"~/bin/more"(。

  • 将文件发送到管道(例如,"| sh"(。

通常,接收 MUA 不应命名或放置这样的文件 它将在没有用户明确的情况下被解释或执行 启动操作。

最新更新