网络安全与防御
约 1903 字大约 6 分钟
网络安全Web 安全OWASP
2026-04-16
OWASP Top 10 (2021)
OWASP(Open Web Application Security Project)发布的 Top 10 是 Web 应用安全领域最具影响力的权威指南。
A01 - Broken Access Control(访问控制失效)
访问控制是保护资源免受未授权访问的核心机制。其失效会导致:
- 垂直越权:普通用户执行管理员操作
- 水平越权:用户访问其他同级别用户的数据
- API 未授权:RESTful API 缺少权限校验
防御措施:
- 默认拒绝:所有访问必须明确授权
- 最小权限原则:仅授予完成任务所需的最小权限
- 强访问控制机制:避免客户端直接操控权限
- 记录所有访问控制失效事件
A02 - Cryptographic Failures(加密失败)
敏感数据泄露的根源,通常由于:
- 未对敏感数据加密(如信用卡、健康记录)
- 使用弱加密算法或不当配置
- 密钥管理不当或硬编码密钥
- 传输层未加密(HTTP、SMTP)
常见敏感数据:
- 密码、信用卡号、健康记录、个人身份信息
- 商业机密、专利信息
防御措施:
- 使用强加密算法(AES-256、RSA-4096+)
- 启用 TLS 1.3,禁用弱协议
- 密钥管理系统(KMS)管理密钥
- 避免在 URL 中传输敏感数据
A03 - Injection(注入)
当不可信数据被发送给解释器时发生,常见类型包括:
| 类型 | 描述 |
|---|---|
| SQL 注入 | 操纵 SQL 查询 |
| NoSQL 注入 | 操纵 NoSQL 查询 |
| OS 命令注入 | 执行系统命令 |
| LDAP 注入 | 操纵 LDAP 查询 |
| XPath 注入 | 操纵 XPath 查询 |
经典 SQL 注入示例:
-- 恶意输入:' OR '1'='1
SELECT * FROM users WHERE name = '' OR '1'='1' AND password = ''防御措施:
- 参数化查询(Prepared Statements)
- 输入验证(白名单方式)
- 存储过程(参数化)
- 转义特殊字符
- 最小权限原则
A04 - Insecure Design(不安全设计)
设计层面的安全缺陷,与实现无关:
- 缺少威胁建模
- insecure default configurations
- 业务逻辑缺陷(如验证绕过)
- 缺少纵深防御
防御措施:
- 威胁建模(STRIDE、Attack Trees)
- 安全设计模式库
- 分离信任边界
- 集成安全到 CI/CD 流程
A05 - Security Misconfiguration(安全配置错误)
常见配置问题:
- 默认账户和密码未修改
- 错误处理泄露堆栈信息
- 未启用安全 headers
- 不必要的功能启用(端口、服务、页面)
- 服务器 TLS 版本配置不当
防御措施:
- 重复强化(Hardening)流程
- 自动化配置检查
- 最小安装原则
- 及时打补丁和更新
A06 - Vulnerable Components(易损组件)
使用具有已知漏洞的第三方组件:
- 过时的库和框架
- 未修复的已知漏洞
- 不再维护的组件
- 未扫描组件依赖
防御措施:
- 依赖管理工具(npm audit、OWASP Dependency-Check)
- 定期更新组件
- 移除未使用的依赖
- 使用组件指纹识别漏洞
A07 - Authentication Failures(身份认证失败)
身份认证机制被突破:
- 弱密码策略
- 明文传输凭据
- Session ID 暴露
- 暴力破解防护缺失
防御措施:
- 多因素认证(MFA)
- 账户锁定和速率限制
- 安全 Session 管理
- 密码哈希存储(bcrypt、Argon2)
A08 - Data Integrity Failures(数据完整性失败)
数据在存储和传输过程中被篡改:
- 不验证软件和数据签名
- 依赖客户端提交的数据
- 不安全的反序列化
防御措施:
- 数字签名验证
- 完整性校验(HMAC)
- 安全反序列化实践
A09 - Logging Failures(日志记录失败)
安全事件未被检测和响应:
- 未记录可审计事件
- 日志不完整或缺失
- 未启用安全监控告警
防御措施:
- 记录所有身份认证和访问控制事件
- 确保日志完整性
- 集中日志管理和分析
- 实时告警机制
A10 - SSRF(服务端请求伪造)
利用服务器访问本不可达的内部资源:
# 恶意请求示例
GET /image?url=http://169.254.169.254/metadata/latest/防御措施:
- 输入验证和过滤
- 禁用 HTTP 重定向
- 限制 URL 方案和端口
- 网络分段
前端常见安全漏洞
XSS(跨站脚本攻击)
攻击者向网页注入恶意脚本代码。
XSS 类型:
| 类型 | 描述 | 示例 |
|---|---|---|
| 存储型 | 恶意脚本永久存储在服务器 | 评论中的脚本 |
| 反射型 | 恶意脚本通过 URL 参数反射 | URL 中的脚本 |
| DOM 型 | 仅在客户端执行,不涉及服务器 | URL hash 中的脚本 |
XSS 攻击后果:
- Cookie/Session 窃取
- 键盘记录
- 钓鱼攻击
- 修改页面内容
- 传播蠕虫
防御措施:
- 输入过滤
- 输出编码(HTML Entity、URL 编码、JavaScript 编码)
- HttpOnly Cookie
- CSP(Content Security Policy)
CSRF(跨站请求伪造)
攻击者诱导用户执行非预期的操作。
CSRF 攻击流程:
1. 用户登录正常网站 A
2. 用户被诱导访问恶意网站 B
3. B 中的恶意代码向 A 发起请求
4. 浏览器自动携带 A 的 Cookie
5. A 认为是合法请求并执行操作防御措施:
- CSRF Token
- SameSite Cookie
- Referer/Origin 检查
- 验证码(CAPTCHA)
点击劫持(Clickjacking)
攻击者通过 iframe 覆盖透明层,诱导用户点击。
防御措施:
- X-Frame-Options header
- CSP frame-ancestors 指令
- 防御性 JavaScript 检测
防御措施
输入验证
在数据进入应用程序时进行验证:
- 白名单验证(推荐)
- 黑名单验证(不推荐)
- 类型检查、长度检查、格式检查
// 白名单验证示例
function validateInput(input) {
const allowed = /^[a-zA-Z0-9]+$/;
return allowed.test(input);
}输出编码
在数据输出到客户端时进行编码:
| 上下文 | 编码方式 |
|---|---|
| HTML 正文 | HTML Entity |
| HTML 属性 | HTML Entity |
| JavaScript | JavaScript Hex |
| URL | URL 编码 |
| CSS | CSS Hex |
// HTML 编码示例
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}CSP(Content Security Policy)
通过 HTTP header 限制资源加载:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-random123'常用指令:
- default-src:默认源
- script-src:脚本源
- style-src:样式源
- img-src:图片源
- connect-src:连接目标
- frame-ancestors:frame 嵌入限制
SameSite Cookie
防止 CSRF 攻击的 Cookie 属性:
| 值 | 行为 |
|---|---|
| Strict | 仅在同一站点请求发送 |
| Lax | 导航请求(如点击链接)发送 |
| None | 任何请求都发送(需 Secure) |
Set-Cookie: session=abc123; SameSite=Strict; Secure; HttpOnlyCSRF Token
为每个用户会话生成唯一令牌:
<form method="POST" action="/transfer">
<input type="hidden" name="csrf_token" value="random-token-here">
<!-- 其他表单字段 -->
</form>验证流程:
1. 服务器生成随机 CSRF Token
2. 表单提交时携带 Token
3. 服务器验证 Token 有效性
4. 无效则拒绝请求HTTPS 与安全 Headers
HTTPS
HTTP over TLS/SSL,提供加密和身份认证:
握手过程:
1. Client Hello(支持的 TLS 版本、加密套件)
2. Server Hello + 证书 + 证书链
3. 客户端验证证书
4. 密钥交换(ECDHE/RSA)
5. 加密通信开始配置建议:
- 使用 TLS 1.3
- 禁用 TLS 1.0/1.1
- 使用强加密套件
- 启用 HSTS
- 配置证书透明性(CT)
安全 Headers
| Header | 用途 |
|---|---|
| Strict-Transport-Security | 强制 HTTPS |
| X-Content-Type-Options | 防止 MIME 类型嗅探 |
| X-Frame-Options | 防止点击劫持 |
| X-XSS-Protection | XSS 过滤(已废弃) |
| Content-Security-Policy | 限制资源加载 |
| Referrer-Policy | 控制 Referer 头 |
| Permissions-Policy | 限制 API 权限 |
推荐配置:
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Security-Policy: default-src 'self'
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), microphone=(), camera=()