刚学php,写了一个限制文件上传类型的代码,由一个htmlt提交表单,调用一个php处理,php使finfo_open(FILEINFO_MIME_TYPE)获取MIME类型。在本地测试时,用Burp Suite 拦截抓包后修改Content-Type,发现仍然被识别出来,修改无效,大神们请问这是什么原因?
1条回答 默认 最新
你知我知皆知 2024-08-07 19:09关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
你使用了
finfo_open来获取 MIME 类型,并且使用了FILEINFO_MIME_TYPE这个常量来指定要检查的 MIME 类型。这个常量是 PHP 内部定义的一个常量,用来表示不同的 MIME 类型。因此,在你的代码中,无论你是否设置了Content-Type的值,都会被正确地识别为 HTML。解决方法:
- 你可以尝试将
CONTENT_TYPE设置为特定的 MIME 类型,而不是默认的text/html。 - 如果你的网站允许上传其他类型的文件(例如 .zip、.pdf 等),那么你需要在服务器端对这些文件进行适当的处理,确保它们符合预期的 MIME 类型。
- 在客户端,你应该阻止浏览器自动设置
Content-Type,或者在用户选择上传文件前,手动设置合适的 MIME 类型。
以下是一个示例代码片段,演示如何通过设置
CONTENT_TYPE来防止 MIME 类型检测:if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) { $filename = basename($_FILES['file']['name']); $type = pathinfo($filename, PATHINFO_EXTENSION); if ($type == 'zip') { // 将这里替换为你想要的 MIME 类型 header('Content-Type: application/zip'); move_uploaded_file($_FILES['file']['tmp_name'], 'path/to/save/your/file.zip'); } elseif ($type == 'pdf') { // 或者其他的 MIME 类型 header('Content-Type: application/pdf'); move_uploaded_file($_FILES['file']['tmp_name'], 'path/to/save/your/file.pdf'); } }这段代码会根据上传的文件名判断 MIME 类型并相应地设置 Content-Type。
解决 无用评论 打赏 举报- 你可以尝试将