当用户上传文件时,有一些明显的验证,例如: 限制文件大小,检查文件扩展名是否可以接受等。
我想知道限制文件名中的字符数是否有任何好处?例如,用户无法将文件上传到包含 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 不应命名或放置这样的文件 它将在没有用户明确的情况下被解释或执行 启动操作。