🗣 Wd提问: php 文件上传 禁止上传 html
🤖 Ai回答: 在 PHP 中,为了安全起见,禁止用户上传 `.html` 文件(或其他可能被恶意利用的文件类型)是一个常见的需求。你可以通过以下几种方式来实现:
✅ 方法一:检查文件扩展名(推荐)
在上传文件前,检查文件扩展名是否为 `.html` 或 `.htm`,如果是则拒绝上传。
php
<?php
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']; // 允许的图片格式
$disallowedExtensions = ['html', 'htm']; // 禁止上传的扩展名
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['file'])) {
$file = $_FILES['file'];
$fileExtension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
// 检查是否为禁止的扩展名
if (in_array($fileExtension, $disallowedExtensions)) {
die(错误:不允许上传 HTML 文件。);
}
// 检查是否为允许的扩展名
if (!in_array($fileExtension, $allowedExtensions)) {
die(错误:文件类型不被允许。);
}
// 检查文件大小(例如:限制为 5MB)
if ($file['size'] 5 * 1024 * 1024) {
die(错误:文件大小超过限制。);
}
// 检查是否为合法上传文件
if ($file['error'] !== UPLOAD_ERR_OK) {
die(错误:文件上传失败。);
}
// 生成安全的文件名(防止路径遍历、重名等)
$newFileName = uniqid() 、'.' 、$fileExtension;
$uploadDir = 'uploads/';
$uploadPath = $uploadDir 、$newFileName;
// 创建目录(如果不存在)
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
// 尝试移动文件
if (move_uploaded_file($file['tmp_name'], $uploadPath)) {
echo 文件上传成功!;
} else {
echo 文件上传失败。;
}
}
}
?
✅ 方法二:使用 MIME 类型检查(更安全)
虽然 MIME 类型可以被伪造,但结合扩展名检查可以提高安全性。
php
<?php
$allowedMimeTypes = [
'image/jpeg',
'image/png',
'image/gif',
'image/bmp',
'image/webp'
];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['file'])) {
$file = $_FILES['file'];
$fileExtension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
$mimeType = mime_content_type($file['tmp_name']);
// 检查扩展名是否为禁止类型
if (in_array($fileExtension, ['html', 'htm'])) {
die(错误:不允许上传 HTML 文件。);
}
// 检查 MIME 类型是否在允许列表中
if (!in_array($mimeType, $allowedMimeTypes)) {
die(错误:文件类型不被允许。);
}
// 文件大小限制
if ($file['size'] 5 * 1024 * 1024) {
die(错误:文件大小超过限制。);
}
// 移动文件
$uploadDir = 'uploads/';
$newFileName = uniqid() 、'.' 、$fileExtension;
$uploadPath = $uploadDir 、$newFileName;
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
if (move_uploaded_file($file['tmp_name'], $uploadPath)) {
echo 文件上传成功!;
} else {
echo 文件上传失败。;
}
}
}
?
✅ 方法三:使用白名单机制(最安全)
只允许特定文件类型上传,禁止其他所有类型。
php
<?php
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['file'])) {
$file = $_FILES['file'];
$fileExtension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
// 检查扩展名是否在白名单中
if (!in_array($fileExtension, $allowedExtensions)) {
die(错误:文件类型不被允许。);
}
// 检查文件大小
if ($file['size'] 5 * 1024 * 1024) {
die(错误:文件大小超过限制。);
}
// 检查是否为合法上传
if ($file['error'] !== UPLOAD_ERR_OK) {
die(错误:文件上传失败。);
}
// 生成安全文件名
$uploadDir = 'uploads/';
$newFileName = uniqid() 、'.' 、$fileExtension;
$uploadPath = $uploadDir 、$newFileName;
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
if (move_uploaded_file($file['tmp_name'], $uploadPath)) {
echo 文件上传成功!;
} else {
echo 文件上传失败。;
}
}
}
?
⚠️ 安全建议
1、不要只依赖扩展名:攻击者可以上传 `.html.php` 文件绕过检查。
2、使用白名单机制:只允许你信任的文件类型。
3、重命名文件:上传后使用 `uniqid()` 或随机名,避免路径遍历。
4、限制上传目录权限:上传目录应设置为不可执行脚本(如 `php` 文件不能执行)。
5、检查文件内容:对于图片,可以使用 `getimagesize()` 检查是否为真实图片。
6、禁用 `allow_url_fopen` 和 `allow_url_include`:防止远程文件包含。
7、上传文件夹不在 Web 根目录:防止直接访问上传文件。
✅ 示例:检查图片文件真实性
php
if ($file['error'] === UPLOAD_ERR_OK) {
$imageInfo = getimagesize($file['tmp_name']);
if (!$imageInfo) {
die(错误:不是有效的图片文件。);
}
}
✅ 总结
| 方法 | 安全性 | 说明 |
|
| 扩展名检查 | 中等 | 简单但容易被绕过 |
| MIME 类型检查 | 中等 | 可伪造,建议结合扩展名 |
| 白名单机制 | 高 | 推荐方式 |
| 内容检查 | 高 | 最安全,但性能略低 |
✅ 推荐做法:使用白名单 + 扩展名 + 文件内容检查(如图片) + 安全文件名 + 上传目录权限控制。
这样可以有效防止 `.html` 文件上传,避免 XSS 或恶意脚本注入风险。
📣 商家广告:





0
IP地址: 144.143.32.240
搜索次数: 0
提问时间: 2025-11-10 08:37:15
🛒 域名购买:
9.bj.cn
jamctr.com
app.hl.cn
815.net.cn
oa5.cn
61.chat
z-j.net
08.gold
23.gold
c-a.com.cn
❓️ 热门提问:
云计算公司是干什么的
net.ck域名
域名注
挂机类型的游戏
游戏挂机云服务器推荐
定位信息
杭州电商托管
云主机的配置不包括
ftp网站建设
怎么购买好的域名
豌豆Ai站群搜索引擎系统
🌐 域名评估:
f.xz.cn
uavtower.org.cn
lll.college
vivo.tw.cn
evtolfair.com
pp.mo.cn
vtol.jx.cn
musk.city
igo.pw
xg.gs
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
广东月饼公司
手机常用软件
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。