学网络安全,可以从你熟悉的开发过程开始:一个接口为什么能被访问,某个用户为什么能读到一条数据,一段外部输入为什么会改变程序行为。每次练习都留下四样东西:预期边界、实际证据、修复方法、回归结果。
这个系列提供可重复的小实验。首轮只用本机 Docker 和虚构数据;网络服务映射到 127.0.0.1:18080。不需要准备公网服务器,也不要求先安装一整套工具发行版。
一、按什么顺序学习
| 顺序 | 笔记 | 这次要掌握 | 完成标志 |
|---|---|---|---|
| 01 | 本篇:准备环境 | 资产、边界、风险与验证 | 能启动、测试、关闭实验 |
| 02 | 网络与 HTTP | IP、端口、DNS、HTTP、TLS | 能解释一次请求和一次失败 |
| 03 | Linux 权限 | 用户、组、文件与目录权限 | 能复现拒绝读取,再用最小权限恢复 |
| 04 | Web 漏洞与修复 | 身份、对象越权、参数化查询、日志 | 能对比漏洞版与修复版,并说明原因 |
| 补充 | WiFi 与家庭网络 | 无线网络、访客隔离、暴露面 | 画出自己网络的设备和访问边界 |
建议每次安排一个实验,而不是一次背完术语。先自己预测结果,再执行命令,最后对照解释。本文后的复习题不依赖付费平台。
二、先建立四个概念
资产是你要保护的东西,例如机器人日志、设备配置、账户或控制接口。威胁是可能造成损害的行为或事件。漏洞是让这种事件更容易发生的缺陷。风险还取决于缺陷是否能被触达,以及损害有多大。
例如:一台机器人把控制 API 开在局域网,接口没有鉴权。端口开放描述的是可达性;缺少鉴权是访问边界的缺陷;如果网络中的其它设备能发运动指令,才进一步形成具体风险。不能仅凭“发现开放端口”便判断已经被入侵。
三个常用目标也可以落到实际问题上:
- 机密性:未授权的人能否读到数据?
- 完整性:数据或指令能否被不当修改?
- 可用性:正常使用是否会被中断?
本轮练习重点是前两项,并观察日志。涉及故障、流量或扫描的后续实验仍以自己拥有或明确获准的目标为范围。
三、准备一次性实验环境
前提:已安装并启动 Docker,能运行 docker compose version。以下命令在本仓库根目录执行;macOS 可以使用 Docker Desktop,Linux 使用 Docker Engine。Linux 权限练习在容器里完成。
./bin/site.sh security-build |
预期:测试显示 Ran 7 tests 和 OK;HTTP 返回 200,JSON 中 ok 为 true。第一次 build 需要下载基础镜像;镜像建好后 test 无需联网,也不会发布端口。
实验服务有两个虚构用户和两条订单。用于教学的固定 token 是 training-alice、training-bob,不是密码存储或登录系统的生产范例。实验没有主机目录挂载,文件练习只写容器的 /tmp,关闭容器后会丢弃。
# 看日志,不显示 Authorization token |
源码与说明集中在仓库 docker/security-lab/。Docker 将容器端口映射到宿主回环地址;不要把 127.0.0.1:18080:8080 改成面向外部的绑定。回环绑定的意义及旧版 Docker 的限制见 Docker 端口发布文档。
常见启动问题
| 现象 | 排查方向 |
|---|---|
| Cannot connect to Docker daemon | 启动 Docker,再检查当前 context |
| 镜像不存在 | 先执行 security-build |
| 18080 已被占用 | 用 docker ps、macOS 的 lsof -nP -iTCP:18080 -sTCP:LISTEN 确认占用者;不要直接结束未知进程 |
| Connection refused | 检查 docker compose -f docker/security-lab/compose.yaml ps 和 security-logs |
| 下载失败 | 检查镜像仓库连接;不要把没建成的镜像当成实验失败 |
四、每次练习用这份记录模板
实验编号 / 日期: |
学习时尽量记录响应中与结论有关的字段,而不是堆满屏幕截图。报告中“看到 HTTP 403”是一条证据;“所有访问控制都安全”是远大于这条证据的结论。
五、后续怎样扩展
完成这四篇后,再逐项补充 TLS 与证书、会话与 Cookie、浏览器 XSS/CSRF、依赖与镜像供应链、抓包与事件响应。可以用 OWASP WSTG 作为测试主题索引,每次选择一个主题建立自己的最小实验。不要把整份测试指南一次性当作待执行脚本。
本系列当前已提供的是 HTTP、权限、对象访问与 SQL 的小实验;尚未提供完整渗透测试环境或真实事件响应演练。
六、完成清单
- [ ] 我能区分“端口可达”“身份认证”“对象授权”。
- [ ] 我能独立启动实验,确认七项测试通过,再正常关闭。
- [ ] 我能用自己的话写出一条风险,而不只写漏洞名称。
- [ ] 我已经为下一篇建立一份实验记录。