gpt4 book ai didi

php - PHP 的 finfo::buffer 是如何被欺骗的?

转载 作者:可可西里 更新时间:2023-11-01 00:43:39 26 4
gpt4 key购买 nike

处理上传的文件时 $_FILES['foo']['type'] 一点也不可靠。我发现如果您在 OS X 上更改扩展名,“类型”会自动更改。

而是考虑:

$fileInfo = new \finfo(FILEINFO_MIME);
$mimeType = $fileInfo->buffer(file_get_contents($_FILES['foo']['tmp_name']));
$mimeType = explode(';', $mimeType);

现在,如果我将 PHP 脚本重命名为 .jpg 并上传它(在 OS X 10.10 上)$_FILES['foo']['type'] = image/jpeg$mimeType = text/x-php

文件类型很容易改变,但是PHP的finfo::buffer如何被欺骗呢? PHP 检查的 $_FILES['foo']['type']finfo(FILEINFO_MIME) 之间有什么区别?

最佳答案

PHP 不检查 $_FILES 类型中的任何内容;上传文件时,发送方浏览器 正在发送它认为文件类型的元数据。 $_FILES['file']['type'] 只是反射(reflect)浏览器上传的这个值。显然,任何人都可以随意恶搞。

Finfo 使用 magic database ,它只是文件类型的识别特征的集合。也就是说,所有 JPEG 文件都有一个特征 header ,所有 ZIP 文件都以某种方式开始,这种文件类型有这些数量的前导字节,那种文件类型有那些类型的尾随字节等等。如果你真的这样,这就更难欺骗了想要生成某种类型的有效文件,但绝非不可能。

关于php - PHP 的 finfo::buffer 是如何被欺骗的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com