php - 上传时检查文件类型,以及浏览器依赖问题

标签 php mime-types

我正在构建一个 php 文件 uploader ,但我遇到了一些安全问题。例如,我不想允许“.php”文件上传。据我所知,检查文件类型的唯一方法是使用 $_FILES['file']['type'],它的值取决于浏览器。

我检查了多个浏览器,发现在选择常规 .php 文件时,不同的浏览器返回这些值:

firefox: application/x-download
chrome: text/plain
safari: text/plain
IE: text/plain
opera: application/octet-stream

我也尝试过对常规 .txt 文件进行相同的实验,所有浏览器都返回 text/plain 作为 mime 类型。

那么问题来了,如果我想允许 .txt 文件上传,我应该怎么做才能阻止 .php 文件上传?

最佳答案

不要依赖客户端发送的信息。甚至客户端发送的媒体类型也是可以伪造的。

如果您不想允许 PHP 文件,只需不允许文件扩展名为 .php 的文件或将其更改为 .txt:

if (strtolower(strrchr($_FILES['file']['name'], '.')) == '.php') {
    // has file extension .php
}

关于php - 上传时检查文件类型,以及浏览器依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027686/

相关文章:

php - 使用 PHP 和 Mysql Foreach 循环创建多维数组

php - 如何使用 Laravel 从 MySQL 中的 '-'(连字符)分隔值获取数据?

php - 在 PHP 中打印货币数字格式

php - 在 WooCommerce 中列出产品类别的主要产品子类别

python - 从 python 模块返回文件

http-headers - TAR文件的正确MIME媒体类型

java - 在 eclipse 中对 svn 项目中的所有文件和文件夹使用 autoprops

javascript - 使用 MIME 类型 application/json 可能会导致什么问题?

php无法从Swift编写的Xcode程序获取参数

svn - 您可以修改 VisualSVN 以使其呈现 HTML 文件吗?