# PHP 文件上传与下载:一个看似简单的功能为什么这么危险

举报
yd_220371319 发表于 2026/10/12 22:18:34 2026/10/12
【摘要】 文件上传是常见功能,也是攻击面比较大的地方。## 不要相信扩展名`avatar.jpg` 不代表它一定是 JPEG。应该结合实际文件内容进行检查。## 限制大小```phpif ($_FILES["file"]["size"] > 5 * 1024 * 1024) {    exit("文件过大");}```PHP 和 Web 服务器层面也应该有合理限制。## 不要直接使用原始文件名不要简单...


文件上传是常见功能,也是攻击面比较大的地方。

## 不要相信扩展名

`avatar.jpg` 不代表它一定是 JPEG。

应该结合实际文件内容进行检查。

## 限制大小

```php
if ($_FILES["file"]["size"] > 5 * 1024 * 1024) {
    exit("文件过大");
}
```

PHP 和 Web 服务器层面也应该有合理限制。

## 不要直接使用原始文件名

不要简单地:

```php
move_uploaded_file($tmp, "uploads/" . $_FILES["file"]["name"]);
```

可以生成随机文件名:

```php
$name = bin2hex(random_bytes(16));
```

## 上传目录隔离

如果用户上传到 Web 可访问目录,需要确认上传内容不会被当成 PHP 脚本执行。

更稳妥的方案之一是把用户文件放在非脚本执行目录,再通过下载接口提供访问。

## 下载也要检查权限

即使知道文件 ID,也不代表任何用户都有权限下载。

服务端仍应检查当前用户是否拥有这个文件。

## 小结

文件功能真正要考虑的是:

```text
谁可以上传
上传什么
保存在哪里
谁可以下载
```

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。