网络安全

返回 计算机网络


常见攻击类型

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 指向恶意 IPDNSSEC、DoH
ARP 欺骗伪造 ARP 响应劫持局域网流量动态 ARP 检测(DAI)、静态 ARP 表
SSL 剥离降级 HTTPS 为 HTTPHSTS 预加载

认证与授权

机制说明
Session + Cookie服务端维护状态,适合传统 Web
JWT无状态 Token,适合前后端分离、微服务
OAuth 2.0第三方授权(“用 GitHub 登录”)
OIDCOAuth 2.0 上层,增加身份层(ID Token)
API Key服务端间调用,放 Header 或 Query
MFA多因素认证,密码 + 动态码(TOTP/短信)

JWT 常见安全问题

问题说明防护
alg: none 攻击修改算法为 none,跳过签名验证服务端强制指定算法,拒绝 none
密钥混淆RS256 公钥被当成 HS256 密钥验证服务端固定验证算法类型
过期时间缺失Token 永不失效始终设置 exp,配合短 TTL
敏感信息写入 PayloadJWT 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安全日志缺失无审计日志,无法检测入侵
A10SSRF服务端请求伪造访问内网

密码安全

存储:使用慢哈希(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)

  • 所有访问均需认证和授权,无论来自内网还是外网
  • 最小权限原则,按需授权
  • 持续监控异常行为
  • 微分段隔离,限制横向移动

相关

  • TLS — 传输层安全的核心
  • HTTPS — Web 加密访问
  • HTTP — HTTP 安全头部配置
  • DNS — DNS 劫持与 DNSSEC 防护
  • CDN — CDN 提供 DDoS 防护和 WAF
  • 代理 — 正向/反向代理在安全中的应用
  • 通信协议 — 各协议的安全等级对比