php - 为什么我不想信任文件的原始上传文件扩展名?
问题描述
我正在为我的公司开发视频管道,并使用 Laravel 7 作为后端。上传文件时,我注意到生成的文件扩展名并不总是原来的样子。我们接受最常见的文件类型,一旦上传,我们会在处理之前将它们存储在临时目录中。
我注意到 Laravel 会经常更改 webm 文件的文件扩展名(如果上传通过 javascript 的 MediaRecorder api 创建的视频文件)或 mov 文件到 mkv。这似乎不会对我们的转码或发布过程造成任何问题,但我想知道它是否会成为未来的问题。
有什么理由我不应该信任为文件提供的 mime 类型?我知道有人可能会将可执行文件上的扩展名更改为将上传并阻止其正确显示甚至可能导致浏览器崩溃的内容。但是,如果扩展名不匹配,我真的不明白更改扩展名的实际原因。除了检测到的扩展名与原始文件名不匹配,我还应该做更多吗?感觉就像我在这里遗漏了整个画面的一些部分,我想解决这个问题。
解决方案
因为如果我上传了一个名为“yay.mp4”的文件,但它实际上是一个 php 文件,而且我知道一种利用你的 laravel 版本在你的上传目录中运行文件的偷偷摸摸的方法,现在你就是僵尸网络的一部分。欢迎。
始终在其内容上验证文件(例如,正确字节位置中的幻数,与标题字节所说的一样长的内容等),因为 mime 类型和文件扩展名只是声明:上传的东西认为这些是哑剧类型/扩展名,但他们没有验证(因为那不是他们的工作)。但是,您绝对应该(因为它是=)
推荐阅读
- apache-kafka - 如何从 Kafka brokerslist 中检索 zookeeper 主机详细信息
- junit - 实际上与这个模拟错误的交互为零?
- python-3.x - 我们如何使用python找到印地语文本的音节
- java - java.lang.IllegalArgumentException:无法识别的字段“面包”
- django - Django JSONField 未接收到已清理的数据
- javascript - 使用 jquery 验证表单时使用默认浏览器消息
- sql-server - 在 SQL Server 中使用 SQL 进行队列分析
- mysql - 为 sequelize 更改 Distinct 的别名
- json - 为 Spark 结构化流解析 JSON
- android - 如何检查内容提供者中是否有任何数据