网络安全
→ 返回 计算机网络
常见攻击类型
XSS(跨站脚本攻击)
攻击者将恶意脚本注入到网页,在其他用户浏览器中执行:
反射型:恶意链接中携带脚本参数,服务端直接输出到页面
存储型:脚本存入数据库,每次渲染时在所有用户浏览器执行
DOM型:前端 JS 直接将用户输入写入 innerHTML
防护: 输出时 HTML 转义、Content-Security-Policy、HttpOnly Cookie。
CSRF(跨站请求伪造)
诱导已登录用户点击恶意链接,以用户身份发起请求:
<!-- 恶意页面中 -->
<img src="https://bank.com/transfer?to=attacker&amount=10000">防护: CSRF Token(每次请求携带随机 Token)、SameSite Cookie、校验 Referer。
SQL 注入
在用户输入中插入 SQL 语句,操控数据库:
输入:' OR '1'='1
查询变为:SELECT * FROM users WHERE username='' OR '1'='1'
防护: 参数化查询(PreparedStatement)、ORM 框架、最小权限原则。
DDoS(分布式拒绝服务)
大量请求淹没服务器,使合法用户无法访问:
| 类型 | 说明 |
|---|---|
| 流量型 | UDP Flood、ICMP Flood,耗尽带宽 |
| 连接型 | SYN Flood,耗尽连接表 |
| 应用层 | HTTP Flood,耗尽服务器资源 |
防护: CDN + 流量清洗、限速、IP 黑名单、WAF。
中间人攻击(MITM)
攻击者拦截并篡改通信内容:客户端 ←→ 攻击者 ←→ 服务端
防护: HTTPS(TLS 证书验证)、HSTS、公钥固定。
SSRF(服务端请求伪造)
攻击者控制服务端发起请求,访问内网资源或云元数据:
攻击者 → POST /fetch?url=http://169.254.169.254/latest/meta-data/
服务端内部请求 → AWS 实例元数据(含临时凭证)
防护: 白名单校验目标 URL、禁止请求私网段(10.x、172.16.x、192.168.x)、使用 DNS 重绑定防护。
XXE(XML 外部实体注入)
解析 XML 时,外部实体引用被展开,读取服务器本地文件:
<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<root>&xxe;</root>防护: 禁用 XML 外部实体解析(FEATURE_EXTERNAL_GENERAL_ENTITIES = false)、使用 JSON 替代 XML。
CORS 配置错误
宽松的跨域策略使恶意站点可读取敏感 API 响应:
Access-Control-Allow-Origin: * # 危险:允许任何来源
Access-Control-Allow-Credentials: true # 与 * 组合浏览器会拒绝,但 origin 反射更危险防护: Allow-Origin 使用精确白名单、不反射 Origin 请求头、敏感接口强制校验 Origin。
其他常见攻击
| 攻击 | 说明 | 防护 |
|---|---|---|
| 暴力破解 | 穷举密码 | 限速、账号锁定、MFA |
| 敏感信息泄露 | 接口返回多余字段 | 最小化返回数据 |
| 路径遍历 | ../../../etc/passwd | 路径白名单、沙箱 |
| 点击劫持 | iframe 覆盖欺骗点击 | X-Frame-Options、CSP frame-ancestors |
| DNS 劫持 | 篡改 DNS 指向恶意 IP | DNSSEC、DoH |
| ARP 欺骗 | 伪造 ARP 响应劫持局域网流量 | 动态 ARP 检测(DAI)、静态 ARP 表 |
| SSL 剥离 | 降级 HTTPS 为 HTTP | HSTS 预加载 |
认证与授权
| 机制 | 说明 |
|---|---|
| Session + Cookie | 服务端维护状态,适合传统 Web |
| JWT | 无状态 Token,适合前后端分离、微服务 |
| OAuth 2.0 | 第三方授权(“用 GitHub 登录”) |
| OIDC | OAuth 2.0 上层,增加身份层(ID Token) |
| API Key | 服务端间调用,放 Header 或 Query |
| MFA | 多因素认证,密码 + 动态码(TOTP/短信) |
JWT 常见安全问题
| 问题 | 说明 | 防护 |
|---|---|---|
alg: none 攻击 | 修改算法为 none,跳过签名验证 | 服务端强制指定算法,拒绝 none |
| 密钥混淆 | RS256 公钥被当成 HS256 密钥验证 | 服务端固定验证算法类型 |
| 过期时间缺失 | Token 永不失效 | 始终设置 exp,配合短 TTL |
| 敏感信息写入 Payload | JWT Payload 仅 Base64 编码非加密 | 不在 Payload 存密码等敏感字段 |
API 安全
认证 → 每次请求携带有效凭证(JWT / API Key)
授权 → 校验当前身份是否有权操作该资源
限速 → 防止暴力破解和 API 滥用(Rate Limiting)
输入校验 → 所有外部输入视为不可信,严格验证类型和范围
输出过滤 → 不返回多余字段(避免信息泄露)
日志审计 → 记录关键操作,便于溯源
常用限速策略:固定窗口、滑动窗口、令牌桶、漏桶。
OWASP Top 10(2021)
| 排名 | 类别 | 典型例子 |
|---|---|---|
| A01 | 访问控制失效 | 水平越权(访问其他用户数据) |
| A02 | 加密失败 | 明文存储密码、HTTP 传输敏感数据 |
| A03 | 注入 | SQL 注入、命令注入、LDAP 注入 |
| A04 | 不安全设计 | 缺乏威胁建模、业务逻辑漏洞 |
| A05 | 安全配置错误 | 默认密码、开放不必要端口、详细错误信息 |
| A06 | 易受攻击的组件 | 使用含已知漏洞的依赖包 |
| A07 | 身份认证失败 | 弱密码策略、会话固定 |
| A08 | 软件和数据完整性失败 | 不验证更新包签名、CI/CD 供应链攻击 |
| A09 | 安全日志缺失 | 无审计日志,无法检测入侵 |
| A10 | SSRF | 服务端请求伪造访问内网 |
密码安全
存储:使用慢哈希(bcrypt / Argon2 / scrypt),加盐,禁止 MD5 / SHA-1
传输:HTTPS,禁止 URL 参数传密码
重置:时效性 Token(随机高熵,一次性,15 分钟内有效)
强度:最小长度 8,强制复杂度或长度换复杂度(passphrase)
安全响应头
Content-Security-Policy: default-src 'self'; script-src 'self'
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), microphone=()零信任(Zero Trust)
传统边界安全假设内网可信,零信任原则:
永不信任,始终验证(Never Trust, Always Verify)
- 所有访问均需认证和授权,无论来自内网还是外网
- 最小权限原则,按需授权
- 持续监控异常行为
- 微分段隔离,限制横向移动