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

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

🤖 Ai回答:
在 PHP 中,为了防止用户上传恶意的 `.htm` 或 `.html` 文件(可能包含 XSS 攻击或执行脚本),你可以通过以下方式来禁止上传 `.htm` 和 `.html` 文件。

✅ 方法一:检查文件扩展名(推荐)

php
<?php
if ($_FILES['file']['error'] == 0) {
$filename = $_FILES['file']['name'];
$filetype = $_FILES['file']['type'];
$filesize = $_FILES['file']['size'];
$tmp_name = $_FILES['file']['tmp_name'];

// 获取文件扩展名
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

// 定义允许的文件类型(例如:jpg, png, pdf, docx 等)
$allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx', 'txt', 'zip'];

// 检查是否为不允许的扩展名(如 htm, html)
if (in_array($ext, ['htm', 'html'])) {
die(不允许上传 HTML 类型文件!);
}

// 进一步验证是否在允许列表中
if (!in_array($ext, $allowed_extensions)) {
die(文件类型不被允许!);
}

// 可选:检查 MIME 类型(更安全)
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $tmp_name);
finfo_close($finfo);

if ($mime_type === 'text/html') {
die(检测到 HTML 内容,上传被拒绝!);
}

// 如果一切正常,移动文件
$upload_dir = 'uploads/';
$new_filename = uniqid() 、'.' 、$ext;
move_uploaded_file($tmp_name, $upload_dir 、$new_filename);

echo 文件上传成功!;
}
?

✅ 方法二:使用 `$_FILES` + 验证逻辑(增强安全性)

php
<?php
$allowed_types = [
'image/jpeg',
'image/png',
'image/gif',
'application/pdf',
'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'text/plain',
'application/zip'
];

// 允许的扩展名(用于双重验证)
$allowed_exts = ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx', 'txt', 'zip'];

if (isset($_FILES['file']) && $_FILES['file']['error'] == 0) {
$file = $_FILES['file'];
$filename = $file['name'];
$tmp_name = $file['tmp_name'];
$mime_type = $file['type'];
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

// 检查扩展名是否为 htm 或 html
if (in_array($ext, ['htm', 'html'])) {
die(禁止上传 HTML 文件。);
}

// 检查 MIME 类型是否是文本或 HTML 类型
if (strpos($mime_type, 'text/') !== false $mime_type === 'text/html' $mime_type === 'application/xhtml+xml') {
die(不允许上传文本或 HTML 文件。);
}

// 检查是否在允许的 MIME 类型和扩展名中
if (!in_array($mime_type, $allowed_types) !in_array($ext, $allowed_exts)) {
die(文件类型不被允许。);
}

// 上传文件
$upload_path = 'uploads/' 、uniqid() 、'.' 、$ext;
if (move_uploaded_file($tmp_name, $upload_path)) {
echo 上传成功:$upload_path;
} else {
echo 上传失败。;
}
}
?

🔐 安全建议

1、不要仅依赖 `$_FILES['type']` —— 它可以被伪造。
2、使用 `finfo_open()` 来检测真实 MIME 类型。
3、不要直接信任文件名或扩展名,应结合内容检查。
4、上传后重命名文件,避免路径遍历攻击。
5、设置上传目录不可执行(`chmod 755`,并禁用 PHP 执行)。
6、在服务器上设置 `.htaccess` 或 Nginx 规则禁止执行上传文件:

apache
.htaccess 示例
<FilesMatch \.(html|htm)$
Order allow,deny
Deny from all
</FilesMatch


🧩 总结

✅ 禁止上传 `.htm` / `.html` 文件的方法:

检查文件扩展名(`pathinfo()`)
检查 MIME 类型(`finfo` 或 `$_FILES['type']`)
禁止上传后处理为可执行文件
配合服务器配置加强安全

如果你需要支持更多文件类型或有特殊需求(如白名单机制),也可以进一步定制。需要我帮你生成完整的上传表单+处理代码吗?

Ai作答

📣 商家广告


域名评估

月饼

算命

中国域名

单字符域名


0

IP地址: 204.213.196.89

搜索次数: 4

提问时间: 2025-11-27 02:21:31

🛒 域名购买

❓️ 热门提问

🌐 域名评估

最新挖掘

🖌 热门作画

🤝 关于我们

🗨 加入群聊

🔗 友情链接

🧰 站长工具
📢

温馨提示

本站所有 问答 均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉

技术支持

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

上一篇 79456 79457 79458 下一篇