软件开发安全与攻防基础
整理日期:2026-07-02
补充自 9.04-security-thinking.md,涵盖安全分层全景、后端防护实践、渗透测试与漏洞挖掘
〇、先澄清一个常见误解
很多人一听到"安全"就只想到"网络安全"——防火墙、DDoS、HTTPS。但实际上,网络安全只是软件开发安全的其中一层。
软件开发安全的完整分层
软件开发安全
├── 网络安全 ← 数据在"路上"是否安全
├── 应用安全 ← 代码有没有漏洞(后端最直接面对的)
├── 数据安全 ← 数据存哪里、怎么加密、谁可以看
├── 身份与访问管理 ← 你是谁、你能干什么
├── 软件供应链安全 ← 引用的第三方库有没有问题
├── 基础设施安全 ← 服务器、容器、云平台本身的配置安全
├── 业务安全 ← 不是技术漏洞,而是逻辑上被钻了空子
└── 合规与治理 ← 法律要求的做到了吗
每一层关心什么
| 层面 |
关心的核心问题 |
典型场景 |
| 网络安全 |
数据在路上是否安全? |
HTTPS、DDoS 防护、防火墙、WAF |
| 应用安全 |
代码有没有漏洞? |
SQL 注入、XSS、越权、反序列化 |
| 数据安全 |
存的数据会不会泄露? |
密码哈希、脱敏、备份、密钥管理 |
| 身份与访问管理 |
谁在操作?权限对不对? |
登录认证、RBAC 权限模型、SSO、OAuth |
| 软件供应链安全 |
引用的开源库有没有后门? |
npm 投毒、Log4j 漏洞、依赖扫描 |
| 基础设施安全 |
服务器和容器配置安全吗? |
端口暴露、K8s RBAC、镜像漏洞 |
| 业务安全 |
业务逻辑有没有被钻空子? |
薅羊毛、刷单、支付金额篡改 |
| 合规与治理 |
法律要求的做到了吗? |
等保 2.0、个保法/GDPR、审计日志 |
举例:一个电商网站出事故,各层怎么划分
| 事故 |
属于哪个层面 |
| 别人伪造登录 token,以你的名义下单 |
应用安全(认证漏洞) |
| 订单数据在传输时被中间人抓包看到 |
网络安全(没走 HTTPS) |
| 数据库被拖库,所有密码明文泄露 |
数据安全(密码没哈希) |
| 引用的第三方图片处理库有远程代码执行漏洞 |
软件供应链安全 |
| 有人写脚本注册 10 万个账号领新用户优惠券 |
业务安全(逻辑没问题,被钻空子) |
| 服务器 SSH 端口 22 暴露公网 + 弱密码被爆破 |
基础设施安全 |
注意:现实中没有哪层是完全独立的。一次越权漏洞,可能是应用安全(代码没校验),可能导致数据安全(泄露他人数据),如果被爬虫批量利用,也是业务安全问题。
一、网络安全整体范围(全景图)
业内通常按 CIA 三要素(机密性、完整性、可用性)分类,在上一节的分层框架下,网络安全这一层又可以展开成以下具体领域:
1. 网络层安全
| 领域 |
说明 |
| DDoS 攻击 / 流量清洗 |
大流量打垮服务器,通过 CDN/高防 IP 清洗 |
| DNS 劫持 / DNS 污染 |
域名解析被篡改,指向恶意地址 |
| 中间人攻击(MITM) |
通信过程中被窃听或篡改 |
| 防火墙 / WAF / IDS/IPS |
网络边界防护与入侵检测 |
2. 传输层安全
| 领域 |
说明 |
| TLS / HTTPS 加密传输 |
保证数据在传输过程中不被窃听 |
| 证书管理 |
CA 证书、双向认证(mTLS) |
3. 应用层安全 ★ 后端开发主战场
| 攻击类型 |
说明 |
| SQL 注入 / 命令注入 / LDAP 注入 |
用户输入被当成代码执行 |
| XSS(跨站脚本) |
恶意脚本注入页面,偷 Cookie / 劫持会话 |
| CSRF(跨站请求伪造) |
第三方网站冒充用户发送请求 |
| SSRF(服务端请求伪造) |
攻击者利用服务器当跳板访问内网资源 |
| 认证与会话安全 |
弱密码、Session 固定、JWT 伪造 |
| 越权漏洞(IDOR) |
普通用户访问/操作他人或管理员的数据 |
| 文件上传漏洞 |
上传 Webshell、路径穿越攻击 |
| 反序列化漏洞 |
不可信数据反序列化导致代码执行(Java/PHP 重灾区) |
4. 数据层安全
| 领域 |
说明 |
| 数据库加密 / 脱敏 |
密码 bcrypt 哈希,手机号/身份证打码存储 |
| 日志安全 |
禁止在日志中输出密码、Token、身份证号等敏感信息 |
| 备份与防丢失 |
定期备份 + 异地容灾 |
5. 基础设施安全
| 领域 |
说明 |
| 服务器加固 |
关闭无用端口、最小权限原则、禁用 root 远程登录 |
| 容器 / K8s 安全 |
镜像漏洞扫描、Pod 逃逸防护、网络策略 |
| CI/CD 安全 |
供应链攻击(依赖投毒)、密钥泄露、构建环境隔离 |
| 云 IAM 权限管理 |
最小权限策略、临时凭证、审计日志 |
6. 业务安全
| 领域 |
说明 |
| 薅羊毛 / 刷单 / 撞库 |
批量注册、领券、登录尝试 |
| 爬虫对抗 |
验证码、行为分析、频率限制 |
| 支付安全 |
金额校验防篡改、回调签名验证、幂等防重复扣款 |
7. 合规与隐私
| 领域 |
说明 |
| 个保法 / GDPR |
用户数据收集需告知+授权、提供删除权 |
| 等保 2.0 |
中国网络安全等级保护制度 |
| 审计追踪 |
谁、什么时间、做了什么操作 → 完整日志链 |
二、后端开发必须守住的底线(按优先级)
🔴 第一优先级:不做好就是事故
| 安全点 |
通俗理解 |
典型做法 |
| SQL 注入防护 |
不要让用户输入拼进 SQL 语句 |
永远用参数化查询(Prepared Statement)或 ORM |
| 认证安全 |
登录不能"走形式" |
密码 bcrypt 哈希,永远不存明文;JWT 校验签名,不信任前端传来的任意 token |
| 越权控制 |
用户 A 不能看到用户 B 的数据 |
每个接口校验"当前登录人是否有权限操作这个资源" |
| 敏感数据加密 |
数据库泄露也不能被直接读取 |
密码单向哈希,手机号/身份证 AES 可逆加密 |
| HTTPS 强制 |
传输过程不能被窃听 |
Nginx/CDN 强制 301 跳转 HTTPS |
🟡 第二优先级:容易被忽视但后果严重
| 安全点 |
通俗理解 |
典型做法 |
| 日志脱敏 |
别把密码、token 打到日志里 |
日志中间件自动对手机号/身份证/密码脱敏 |
| CSRF 防护 |
别人家的网站不能以你的名义发请求 |
校验 Referer/Origin + CSRF Token |
| SSRF 防护 |
用户传个 http://内网地址 让你去请求 |
白名单校验 URL,禁止访问内网 IP 段 |
| 文件上传校验 |
用户上传 .php 文件然后执行 |
校验文件类型魔数,不信任后缀名;存在 OSS/CDN 而非本地 |
| 接口限流 |
一个 IP 一秒打 10000 次登录接口撞库 |
Redis + 滑动窗口限流,登录/短信等敏感接口必加 |
🟢 第三优先级:锦上添花
| 安全点 |
说明 |
| WAF(Web 应用防火墙) |
在网关层拦截常见攻击特征,无需后端自写 |
| 依赖扫描 |
npm audit / pip-audit 自动发现第三方库已知漏洞 |
| CORS 严格配置 |
禁止 Access-Control-Allow-Origin: * |
| 请求签名 |
对外 API 加 HMAC 签名,防止参数被篡改 |
三、攻防基础:红蓝对抗、渗透测试与漏洞挖掘
第二章节是"防御侧"的工程底线。但要真正理解安全,还需要知道攻击是怎么发生的——这一章补充攻防视角。
1. 红蓝对抗(Red Team vs Blue Team)
红蓝对抗是模拟真实攻防的安全演练,核心角色如下:
| 角色 |
定位 |
目标 |
常见手段 |
| 红队(Red Team) |
攻击方 |
模拟真实黑客,找到并利用系统中的漏洞打穿防线 |
钓鱼邮件、漏洞利用、横向移动、提权 |
| 蓝队(Blue Team) |
防御方 |
监控、检测、响应红队的攻击行为 |
日志分析、告警规则、入侵检测、应急响应 |
| 紫队(Purple Team) |
协调方 |
让红蓝两队高效协作,避免"各玩各的" |
共享攻击路径、验证检测规则有效性、推动漏洞修复 |
典型红蓝对抗流程:
红队行动链:
侦察(信息收集)→ 武器化(制作 Payload)→ 投递(钓鱼/漏洞利用)
→ 漏洞利用(Getshell)→ 安装(持久化后门)→ C2(远控)
→ 横向移动(跨系统蔓延)→ 数据窃取/目标达成
蓝队对抗链:
发现 → 检测 → 分析 → 响应 → 溯源 → 修复
关键认知:红蓝对抗不是比赛,红队胜了蓝队不意味着"蓝队差"——目标是发现防御盲区,持续改进。
2. 渗透测试
渗透测试(Penetration Testing)是有授权地模拟攻击,系统性地发现系统安全弱点。
标准流程
① 信息收集 → ② 漏洞扫描 → ③ 漏洞利用 → ④ 权限提升 → ⑤ 后渗透 → ⑥ 报告
| 阶段 |
做什么 |
常用工具 |
| 信息收集 |
收集目标域名、IP、子域名、端口、技术栈、员工信息 |
Nmap、Shodan、Google Dork、subfinder |
| 漏洞扫描 |
自动化扫描已知漏洞 |
Nessus、OpenVAS、AWVS、Xray |
| 漏洞利用 |
手动利用扫描到的漏洞,获取初步访问权限 |
Metasploit、sqlmap、Burp Suite、自定义脚本 |
| 权限提升 |
从低权限提升到 root / 域管理员 |
LinPEAS、WinPEAS、内核提权、SUID 提权 |
| 后渗透 |
横向移动、持久化、数据窃取(模拟真实攻击目标) |
Mimikatz、Cobalt Strike、BloodHound |
| 报告 |
输出漏洞清单、复现步骤、修复建议 |
人工撰写,切忌只给扫描器报告 |
渗透测试的三种类型
| 类型 |
说明 |
| 黑盒 |
不提供任何内部信息,完全模拟外部攻击者视角 |
| 白盒 |
提供完整源码、架构文档、账号权限,深入审计 |
| 灰盒 |
提供部分信息(如普通用户账号),介于黑盒白盒之间 |
3. 漏洞挖掘
漏洞挖掘是系统性地发现未知漏洞的过程,比渗透测试更底层、更偏研究。
常见方法
| 方法 |
说明 |
适用场景 |
| 代码审计(Code Review) |
人工或半自动化审查源码,跟踪用户输入的数据流 |
Web 应用、开源项目 |
| Fuzzing(模糊测试) |
向程序输入大量随机/畸形数据,监控异常崩溃 |
二进制程序、协议实现、文件解析器 |
| 逆向分析 |
反编译二进制程序,分析逻辑以发现漏洞 |
闭源软件、IoT 固件、移动 App |
| 黑盒分析 |
不接触源码,通过输入输出行为推断逻辑缺陷 |
Web API、网络协议 |
| 威胁建模 |
基于 STRIDE 等方法论,系统性推导可能的攻击面 |
系统设计阶段 |
漏洞参考框架:OWASP Top 10(2021)
这是 Web 应用安全最权威的漏洞分类框架:
| 排名 |
漏洞类型 |
一句话理解 |
| A01 |
访问控制失效 |
普通用户能做管理员的事(越权) |
| A02 |
加密机制失效 |
密码没哈希、敏感数据明文传输 |
| A03 |
注入攻击 |
用户输入被当成 SQL/命令/代码执行 |
| A04 |
不安全设计 |
缺乏速率限制、过度暴露错误信息 |
| A05 |
安全配置错误 |
默认密码不修改、过多样例接口暴露 |
| A06 |
脆弱和过时的组件 |
引用的库存在已知漏洞但不升级 |
| A07 |
认证与鉴权失效 |
弱密码策略、Session 管理缺陷、JWT 未校验 |
| A08 |
软件与数据完整性失效 |
反序列化漏洞、CI/CD 管道投毒 |
| A09 |
安全日志与监控失效 |
被攻击了也不知道,没有告警和审计日志 |
| A10 |
SSRF(服务端请求伪造) |
用你的服务器当跳板访问内部系统 |
漏洞挖掘的合法渠道
| 渠道 |
说明 |
| SRC(安全应急响应中心) |
大厂自建漏洞接收平台(腾讯 SRC、阿里 ASRC 等),提交漏洞拿赏金 |
| 众测平台 |
HackerOne、Bugcrowd、补天、漏洞盒子 |
| CVE / CNVD |
公开漏洞编号,全球通用标准 |
| CTF 竞赛 |
以赛代练的攻防竞技(解题赛 / 攻防赛 / 渗透赛) |
⚠️ 法律红线:未经授权的渗透测试 = 违法行为。所有攻防操作必须在授权范围内进行。
核心原则
后端安全的本质就是一句话——永远不信任客户端传来的任何东西。
用户的输入、Token、上传的文件、请求的 Header……每一样都要在后端再做一次校验。因为你永远不知道这到底是真的用户,还是一条构造好的攻击数据包。