豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 Wd提问: php 文件上传 禁止上传 php

🤖 Ai回答:
在 PHP 中,为了防止用户上传恶意的 `.php` 文件(例如 Web Shell),你需要在文件上传时进行严格的检查和限制。以下是几种有效的措施来 禁止上传 PHP 文件:

✅ 1、检查文件扩展名

php
$allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'txt']; // 允许的文件类型
$file_extension = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));

if (!in_array($file_extension, $allowed_extensions)) {
die('不允许的文件类型!');
}

⚠️ 注意:不能仅依赖 `$_FILES['name']` 的扩展名,因为可以被伪造。

✅ 2、使用 `mime_type` 检查(更安全)

php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $_FILES['file']['tmp_name']);
finfo_close($finfo);

$allowed_mime_types = [
'image/jpeg',
'image/png',
'image/gif',
'application/pdf',
'text/plain'
];

if (!in_array($mime_type, $allowed_mime_types)) {
die('文件类型不合法!');
}

✅ 3、检查文件内容(防止伪装成图片的 PHP 脚本)

php
$content = file_get_contents($_FILES['file']['tmp_name']);

// 如果是 PHP 文件,会包含 <?php 或 <script 等标签
if (preg_match('/<\?php|\bphp\b|<script/', $content)) {
die('文件包含非法代码!');
}

🛠️ 这种方式可以识别出伪装成图片但实际是 PHP 的文件(如 `<?php system($_GET['cmd']); ?` 写入到图片中)。

✅ 4、重命名上传文件,避免执行

php
$original_name = $_FILES['file']['name'];
$filename = uniqid() 、'_' 、basename($original_name);
$upload_dir = 'uploads/';
$destination = $upload_dir 、$filename;

move_uploaded_file($_FILES['file']['tmp_name'], $destination);

❌ 不要使用原文件名,尤其是带有 `.php` 后缀的。

✅ 5、设置目录权限,禁用脚本执行

确保上传目录没有执行权限(Apache/Nginx 配置):

apache
.htaccess
<FilesMatch \.(php|phtml|php3|php4)$
Order Allow,Deny
Deny from all
</FilesMatch

或在 Nginx 中:

nginx
location ~* \.(php|phtml)$ {
deny all;
}

✅ 6、完整示例代码

php
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'txt'];
$allowed_mime_types = [
'image/jpeg',
'image/png',
'image/gif',
'application/pdf',
'text/plain'
];

$file = $_FILES['file'];

// 检查是否上传成功
if ($file['error'] !== UPLOAD_ERR_OK) {
die('上传失败!');
}

// 检查扩展名
$extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if (!in_array($extension, $allowed_extensions)) {
die('不允许的文件类型!');
}

// 检查 MIME 类型
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $file['tmp_name']);
finfo_close($finfo);

if (!in_array($mime_type, $allowed_mime_types)) {
die('文件类型不合法!');
}

// 检查文件内容(防止恶意代码)
$content = file_get_contents($file['tmp_name']);
if (preg_match('/<\?php|\bphp\b|<script/', $content)) {
die('文件包含非法代码!');
}

// 生成安全文件名
$safe_filename = uniqid() 、'_' 、basename($file['name']);
$upload_dir = 'uploads/';
if (!is_dir($upload_dir)) mkdir($upload_dir, 0755, true);

$destination = $upload_dir 、$safe_filename;

if (move_uploaded_file($file['tmp_name'], $destination)) {
echo 上传成功!;
} else {
echo 移动文件失败!;
}
}
?

🔐 总结:如何彻底禁止上传 PHP 文件?

| 措施 | 是否必要 |

| 检查文件扩展名 | ✅ 基础防护 |
| 检查 MIME 类型 | ✅ 更安全 |
| 检查文件内容 | ✅ 防止伪装 |
| 重命名文件 | ✅ 防止执行 |
| 服务器配置禁止执行 PHP | ✅ 必须 |

💡 最佳实践建议:

不要信任用户上传的文件名
不要将上传文件放在可执行目录
定期扫描上传目录
使用白名单机制而非黑名单

如有需要,也可以使用第三方库如 [Intervention Image](https://image.intervention.io/) 来验证图片真实性。

如果你使用的是 Laravel、Symfony 等框架,它们也提供了更完善的上传验证机制。

Ai作答

📣 商家广告


广告招商

豌豆Ai站群搜索引擎系统

看相

vps

算命


0

IP地址: 231.142.18.173

搜索次数: 0

提问时间: 2025-11-08 11:37:37

🛒 域名购买
08.gold
671.net.cn
gzzc.net
afuncard.com
zhanwai.cn
691.net.cn
ndgj.cn
887.net.cn
yk.gs
zhong.tw

❓️ 热门提问
蜘蛛池MySQL流量统计
建设机房工程
idc公司租用服务器
电脑主机启动声音很大
cdn 加速乐
vps信用卡
idc机房拓扑图
怎么打开电脑服务器
域名怎么卖的
网站空间香港主机
豌豆Ai站群搜索引擎系统

🌐 域名评估
bu.cx
u.fj.cn
emojiall.com
trump.bj.cn
nxiw.cn
vtolfair.cn
si.yn.cn
hecq.cn
vtol.nm.cn
lmjcy.com

⛏ 最新挖掘
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜

🖌 热门作画

🤝 关于我们:
豌豆Ai 域名 建站 站群 留痕 推广 评估 源码
开发Ai 工具 日记 价格 加盟 广告 流量 留言 联系

🗨 加入群聊
群

🔗 友情链接
贵阳洁净车间  google优化公司  ai提问

🧰 站长工具
Ai工具  whois查询  搜索

📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。

上一篇 79661 79662 79663 下一篇