🗣 Wd提问: php 文件上传 禁止上传 tar
🤖 Ai回答: 在 PHP 中,为了防止用户上传 `.tar` 文件(或其他危险文件类型),你可以通过以下方式来限制文件上传:
✅ 方法一:检查文件扩展名(推荐)
在上传前检查文件的扩展名,禁止 `.tar` 等危险格式。
php
<?php
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
$fileName = $_FILES['file']['name'];
$fileTmpName = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileType = $_FILES['file']['type'];
// 获取文件扩展名(小写)
$fileExtension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
// 定义允许的文件扩展名(例如图片、PDF等)
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx', 'txt'];
// 检查是否为不允许的扩展名(如 tar)
if (in_array($fileExtension, ['tar', 'gz', 'bz2', 'zip'])) {
die('不允许上传压缩包或 tar 文件!');
}
// 只允许特定扩展名
if (!in_array($fileExtension, $allowedExtensions)) {
die('文件类型不被允许!');
}
// 验证文件大小(可选)
if ($fileSize 5 * 1024 * 1024) { // 5MB
die('文件太大!');
}
// 移动文件到目标目录
$uploadDir = 'uploads/';
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0777, true);
}
$newFileName = uniqid() 、'.' 、$fileExtension;
$destination = $uploadDir 、$newFileName;
if (move_uploaded_file($fileTmpName, $destination)) {
echo 文件上传成功!;
} else {
echo 上传失败!;
}
}
?
✅ 方法二:使用 `finfo` 检查 MIME 类型(更安全)
有些用户可能修改文件扩展名欺骗系统,因此建议结合 MIME 类型判断。
php
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $_FILES['file']['tmp_name']);
// 判断是否是 tar 或其他压缩包
if (strpos($mimeType, 'application/x-tar') !== false
strpos($mimeType, 'application/gzip') !== false
strpos($mimeType, 'application/x-bzip2') !== false
strpos($mimeType, 'application/zip') !== false) {
die('不允许上传压缩包!');
}
finfo_close($finfo);
?
⚠️ 注意:`finfo` 更可靠,但需要开启 PHP 的 `fileinfo` 扩展。
✅ 方法三:禁用 PHP 的 `allow_url_fopen` 和 `allow_url_include`(服务器层面)
虽然不是直接控制上传,但可以增强安全性:
ini
; 在 php.ini 中设置
allow_url_fopen = Off
allow_url_include = Off
✅ 方法四:前端和后端双重验证
前端使用 JavaScript 提前过滤文件类型。
后端必须再次验证(不能完全信任前端)。
html
<input type=file accept=.jpg,.jpeg,.png,.pdf name=file
✅ 最佳实践总结
| 措施 | 是否必要 |
| 检查文件扩展名 | ✅ 必须 |
| 检查 MIME 类型 | ✅ 强烈推荐 |
| 检查文件大小 | ✅ 推荐 |
| 使用随机文件名 | ✅ 推荐(避免路径遍历) |
| 限制上传目录权限 | ✅ 推荐(不可执行) |
| 不要解析上传文件为脚本 | ✅ 必须 |
🛑 示例:禁止上传 `.tar` 的完整逻辑
php
$disallowedTypes = ['application/x-tar', 'application/gzip', 'application/x-bzip2', 'application/zip'];
$disallowedExtensions = ['tar', 'gz', 'bz2', 'zip'];
// 检查扩展名
$extension = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));
if (in_array($extension, $disallowedExtensions)) {
die('不允许上传压缩文件!');
}
// 检查 MIME 类型
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $_FILES['file']['tmp_name']);
finfo_close($finfo);
if (in_array($mimeType, $disallowedTypes)) {
die('文件类型不安全,禁止上传!');
}
✅ 这样就能有效阻止 `.tar` 等压缩包上传,提高系统安全性。
📣 商家广告:





0
IP地址: 248.227.135.250
搜索次数: 0
提问时间: 2025-11-08 11:44:18
🛒 域名购买:
32.cx
n-f.cn
zhong.red
822.net.cn
nefronet.com
797.net.cn
sbnjt.com
9el.cn
926.net.cn
ndgj.cn
❓️ 热门提问:
php工程师如何做技术预研
局域网dns服务部署
新世界香港云服务器
vps客服
网盘搜索引擎哪个好
机房中心建设
美国服务器kaivps
VPS服务器迁移要点
vps racknerd promotion
vps哪个便宜
豌豆Ai站群搜索引擎系统
🌐 域名评估:
Left.ltd
v.qh.cn
32.cx
zx.cx
yu7.sx.cn
deepseek.uno
ypettoy.ltd
axeb.cn
ygyyy.com
allonedu.com
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
台湾网站搜尋
广州花都月饼厂
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。