网络安全的本质是攻防对抗。本文梳理了最常见的攻击手法与对应的防御策略,帮助开发者建立基本的安全意识。
一、攻防全景图
flowchart TD |
二、Web 应用攻击
2.1 SQL 注入 (SQL Injection)
原理: 攻击者将恶意 SQL 语句拼接到应用输入中,欺骗数据库执行非授权操作。
攻击示例:
-- 正常查询 |
sequenceDiagram |
防御手段:
| 措施 | 说明 | 优先级 |
|---|---|---|
| 参数化查询 / 预编译语句 | 使用 ? 占位符,SQL 与数据分离 |
✅ 必做 |
| ORM 框架 | MyBatis、Hibernate、JPA 等天然防注入 | ✅ 推荐 |
| 输入校验 | 白名单校验,拒绝特殊字符 | ⚠️ 辅助 |
| 最小权限原则 | 数据库账号不给予 DROP/TRUNCATE 权限 | ✅ 必做 |
| WAF (Web 应用防火墙) | 拦截已知注入特征 | ⚠️ 辅助 |
// ❌ 危险:字符串拼接 |
2.2 XSS 跨站脚本攻击 (Cross-Site Scripting)
原理: 攻击者在网页中注入恶意脚本,当其他用户浏览时脚本被执行,窃取 Cookie、Token 等敏感信息。
三种类型:
flowchart LR |
攻击示例:
<!-- 评论框中输入恶意脚本 --> |
防御手段:
| 措施 | 说明 |
|---|---|
| 输出编码 / 转义 | HTML 实体编码:< → <,> → > |
| Content-Security-Policy | CSP HTTP 头限制脚本执行来源 |
| HttpOnly Cookie | JavaScript 无法读取 Cookie |
| 输入过滤 | 过滤 <script>、onerror= 等危险标签 |
# CSP 响应头示例:只允许同源脚本 |
2.3 CSRF 跨站请求伪造 (Cross-Site Request Forgery)
原理: 攻击者伪造请求,诱导已登录用户点击,在用户不知情的情况下以用户身份执行操作。
sequenceDiagram |
防御手段:
| 措施 | 说明 |
|---|---|
| CSRF Token | 表单中嵌入随机 token,服务端校验 |
| SameSite Cookie | 设置 SameSite=Strict,跨站不发送 Cookie |
| 验证码 | 敏感操作要求输入验证码 |
| Referer 校验 | 检查请求来源是否合法 |
// 生成 CSRF Token |
Set-Cookie: JSESSIONID=xxx; SameSite=Strict; HttpOnly; Secure |
2.4 SSRF 服务端请求伪造 (Server-Side Request Forgery)
原理: 攻击者利用服务器端发起的请求功能,访问内网资源或进行端口扫描。
常见场景: 图片抓取、URL 预览、Webhook 回调等。
防御手段:
- 限制服务器发起的请求只能访问外部白名单域名
- 禁止访问内网 IP 段(127.0.0.1、10.x.x.x、172.16-31.x.x、192.168.x.x)
- 禁用
file://、gopher://等非 HTTP 协议
# 危险:直接请求用户传入的 URL |
2.5 文件上传漏洞
原理: 应用允许用户上传文件但校验不严,攻击者上传 WebShell、恶意脚本等。
攻击示例:
# 上传 jsp/php webshell 到服务器 |
防御手段:
| 措施 | 说明 |
|---|---|
| 后缀白名单 | 只允许 .jpg .png .pdf 等,拒绝 .jsp .php .exe |
| MIME 类型校验 | 检查 Content-Type 头 |
| 文件内容校验 | 读取文件头魔术数字 |
| 上传目录不可执行 | 移除执行权限 |
| 随机重命名 | 防止文件名猜测和路径遍历 |
三、网络层攻击
3.1 DDoS 分布式拒绝服务 (Distributed Denial of Service)
原理: 利用大量僵尸主机同时向目标发送请求,耗尽带宽、CPU 或连接数,导致正常用户无法访问。
flowchart TD |
常见 DDoS 类型:
| 类型 | 攻击层 | 原理 |
|---|---|---|
| SYN Flood | L4 传输层 | 发送大量 SYN 包不完成三次握手 |
| UDP Flood | L4 传输层 | 大量 UDP 包淹没目标带宽 |
| HTTP Flood | L7 应用层 | 模拟正常 HTTP 请求攻击应用 |
| DNS Amplification | L4→反射 | 利用 DNS 开放解析器放大流量 |
防御手段:
- CDN / 云清洗:Cloudflare、阿里云 WAF、AWS Shield
- 速率限制:Nginx
limit_req、limit_conn - SYN Cookie:防止半连接队列耗尽
- IP 黑/白名单:封禁异常 IP
- Anycast 网络:分散流量到多个数据中心
# Nginx 速率限制示例 |
3.2 中间人攻击 MITM (Man-in-the-Middle)
原理: 攻击者拦截并篡改通信双方的数据,常见于公共 Wi-Fi、ARP 欺骗等场景。
sequenceDiagram |
防御手段:
- HTTPS:全站启用 TLS,证书验证
- HSTS:强制浏览器使用 HTTPS
- 证书固定:Pin 证书公钥,防止伪造证书
- 避免公共 Wi-Fi:使用 VPN 加密隧道
# Nginx HSTS 配置 |
3.3 DNS 劫持
原理: 篡改 DNS 解析结果,将用户引导到钓鱼网站。
防御手段:
- DNSSEC:DNS 签名验证
- DoH / DoT:DNS over HTTPS/TLS,加密 DNS 查询
- 使用可信 DNS:
1.1.1.1(Cloudflare)、8.8.8.8(Google)
四、安全加固最佳实践清单
4.1 开发阶段
[✅] 所有 SQL 使用参数化查询 |
4.2 运维阶段
[✅] 服务器端口最小化开放(只开 80/443/SSH) |
4.3 安全工具栈
| 工具 | 用途 |
|---|---|
| OWASP ZAP / Burp Suite | Web 漏洞扫描与渗透测试 |
| Nmap | 端口扫描与网络发现 |
| Wireshark | 流量抓包分析 |
| Metasploit | 渗透测试框架 |
| ClamAV | 防病毒扫描 |
| Fail2ban | 暴力破解防护 |
| OpenVAS | 漏洞扫描器 |
| Trivy / Snyk | 容器镜像安全扫描 |
五、攻防演练流程
flowchart LR |
蓝方(防守方)的每层防御,都对应红方(攻击方)的每一步。
六、常见面试题
Q1:SQL 注入怎么防御?
A:核心是参数化查询,辅助是输入校验 + 最小权限 + WAF。
Q2:XSS 和 CSRF 的区别?
A:XSS 是信任用户输入导致的脚本注入,CSRF 是信任用户浏览器导致的请求伪造。XSS 可以窃取 CSRF Token,所以先防 XSS 再防 CSRF。
Q3:HTTPS 能防哪些攻击?
A:防中间人窃听/篡改、防 DNS 劫持(结合 HSTS)。防不了 DDoS、业务逻辑漏洞、XSS。
Q4:什么是纵深防御?
A:多层防御体系——即使某一层被攻破,后续层仍然能拦截。如 WAF → API 校验 → 数据库权限 → 加密存储。
Q5:如果服务器已经被入侵怎么办?
A:①立即断网隔离 → ②保留现场证据 → ③排查入侵路径 → ④重装系统恢复 → ⑤修补漏洞 → ⑥复盘改进。
七、推荐资源
- OWASP Top 10:https://owasp.org/www-project-top-ten/
- PortSwigger Web Security Academy:在线攻防实验室
- HackTheBox / TryHackMe:实战渗透平台
- 《白帽子讲 Web 安全》(吴翰清)— 国内经典入门书
- 《Web 安全攻防:渗透测试实战指南》
- Kali Linux:渗透测试专用系统
- CVE 漏洞库:https://cve.mitre.org/
记住: 安全不是一次性配置,而是一个持续的过程。保持学习,关注新的 CVE 漏洞,定期做安全审计,才能让你的系统更健壮 💪