CC 咖啡猫的工作空间 Coding Space

软件开发安全与攻防基础

整理日期: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……每一样都要在后端再做一次校验。因为你永远不知道这到底是真的用户,还是一条构造好的攻击数据包。