0.6 路径:绝对路径与相对路径
第〇篇「零基础预科」免费。这一篇解决一个问题:怎么用一行文字,精确告诉电脑某个文件在哪。
一、路径是什么
文件在目录树里的"位置描述"就是路径(Path) ,它把"从起点到文件经过的文件夹"一个个列出来。
Windows 用反斜杠
\分隔:C:\Users\yibo\Desktop\报告.txtLinux 用正斜杠
/分隔:/home/ubuntu/gysec/docker-compose.yml
网址
https://gysec.top/wiki/abc用的也是正斜杠/,和 Linux 一致。
二、绝对路径:从根目录一路写全
绝对路径从最顶层的根目录出发,把经过的每一层都写出来,因此位置唯一、没有歧义。
- Windows 以盘符开头:
C:\Windows\System32\drivers\etc\hosts - Linux 以
/开头:/etc/openresty/gysec/users.json
无论你"当前站在哪个文件夹",绝对路径指向的都是同一个地方。
三、相对路径:从"当前所在文件夹"出发
相对路径不写根,而是以你当前的工作目录为起点来描述。两个特殊符号非常重要:
| 符号 | 含义 |
|---|---|
. | 当前目录(现在站的文件夹) |
.. | 上一级目录(父文件夹) |
举例,假设当前在 /home/ubuntu/gysec/docs/:
| 相对路径 | 实际指向 |
|---|---|
index.md | /home/ubuntu/gysec/docs/index.md |
./learn/a.md | 当前目录下 learn 文件夹里的 a.md |
../deploy/publish.ps1 | 上一级 gysec 下 deploy 里的 publish.ps1 |
../../etc/hosts | 连续上两级再进 etc(可能已跳出项目) |
四、安全里为什么路径极其重要
- 路径穿越(目录遍历):如果程序把用户输入直接拼进文件路径,又没过滤
..,攻击者就能用../../etc/passwd跳出受限目录,读到系统敏感文件; - ZipSlip:压缩包里夹带
../路径,解压时把恶意文件写到系统目录(kkFileView 那类漏洞就涉及); - Web 根目录:Web 服务只把某个文件夹(如
/var/www/gysec)对外暴露,理解"根"才能理解哪些文件本不该被访问; - Docker 挂载、反弹 IP、配置路径:复现漏洞时几乎处处要写路径。
一个直观的防御原则:处理文件路径时,先把它规范化(解析掉所有
.和..),再确认结果仍位于允许的目录内,否则拒绝。
五、本篇小结
- 路径 = 文件在目录树中的位置;Windows 用
\、Linux 和网址用/。 - 绝对路径从根出发、唯一无歧义;相对路径从当前目录出发,用
.和..。 - 安全上:路径穿越
../、ZipSlip、Web 根目录、挂载路径都建立在路径概念之上。 - 防御:规范化路径并校验其仍在允许目录内。
下一篇 0.7 回到图形界面,系统梳理鼠标、窗口、菜单、对话框的标准操作。