0.5 文件名、扩展名与文件类型
第〇篇「零基础预科」免费。这一篇讲文件名末尾那个"小尾巴"——扩展名,以及它和安全的关系。
一、扩展名是什么
一个完整文件名通常长这样:
报告 .docx
↑主文件名 ↑扩展名(后缀)扩展名用来表示文件类型,并决定系统默认用哪个程序打开它。
常见扩展名:
| 扩展名 | 类型 | 用什么打开 |
|---|---|---|
.txt | 纯文本 | 记事本 |
.md | Markdown 文档 | 编辑器 |
.pdf | PDF 文档 | PDF 阅读器 |
.png .jpg | 图片 | 看图/浏览器 |
.mp4 | 视频 | 播放器 |
.exe | Windows 可执行程序 | 双击即运行 |
.py | Python 脚本 | Python 解释器 |
.yml .json | 配置/数据文件 | 编辑器/程序 |
.sh | Linux 脚本 | shell 解释器 |
二、重要安全习惯:显示扩展名
Windows 默认会隐藏"已知类型"的扩展名。这在安全上是个坏习惯,因为它给了伪装空间。
设想一个攻击者发来的文件,真实名字是:
工资表.jpg.exe- 如果扩展名被隐藏,你只看到
工资表.jpg,以为是图片,双击 → 实际运行的是.exe程序,中招; - 如果扩展名显示完整,你会清楚看到结尾是
.exe。
建议立刻打开"显示文件扩展名":Windows 文件资源管理器 → "查看"选项卡 → 勾选"文件扩展名"。
三、扩展名 ≠ 真实类型
要建立一个严谨认知:扩展名只是"名字上的提示",文件的真实类型由它的内容决定。
- 把
a.txt改名成a.png,里面还是文字,并不会真的变成图片; - 系统判断真实类型,靠文件开头的几个特殊字节,叫文件头 / 魔数(magic number):
- PNG 文件以
89 50 4E 47开头; - PDF 以
%PDF开头; - Java 序列化数据以
AC ED 00 05开头(后面反序列化篇会用到)。
- PNG 文件以
Linux 有个命令 file 文件名,就是读内容来告诉你真实类型。
四、安全中的扩展名问题
- 文件上传绕过:很多网站只检查扩展名是否为图片,攻击者把脚本改名、或同时伪造文件头来绕过,是 Web 常见考点;
- 木马伪装:钓鱼邮件常用 Word/Excel 图标 + 可执行内容(或带宏的文档);
- 靶场文件:你会看到
.ser(Java 序列化数据)、.class(编译后的 Java)、.key(密钥)等,认识扩展名能快速判断"这是什么、该用什么处理"。
五、本篇小结
- 扩展名表示文件类型、关联打开方式;常见类型要眼熟(txt/pdf/png/exe/py/yml/sh)。
- 建议开启显示扩展名,防止
jpg.exe这类伪装。 - 扩展名不等于真实类型,真实类型由文件头/魔数决定,改名不转换内容。
- 文件上传校验、木马伪装、靶场文件识别都与此相关。
下一篇 0.6 讲"路径"——怎么用一行文字精确告诉电脑某个文件在哪。