HTTP / HTTPS

区别

  1. 加密方式

    • HTTP:使用明文传输,数据在传输过程中可被截获和查看。
    • HTTPS:通过 SSL/TLS 协议对数据进行加密,确保传输安全性与完整性。
  2. 身份验证

    • HTTP:不自带身份验证,任何人可访问(取决于应用层控制)。
    • HTTPS:通过数字证书(CA 签发)+ SSL/TLS 握手验证服务器身份,降低中间人(MITM)风险。
  3. 端口号

    • HTTP:默认使用 80 端口。
    • HTTPS:默认使用 443 端口,提供传输层加密与证书校验。

身份验证与鉴权技术

常见方案与场景

  • Cookie + Session:服务端保存会话状态,适合传统 web 应用,简单易用(建议内网或受控环境)。
  • Token(自定义 Token):无状态,适应跨域与移动端场景。
  • JWT(JSON Web Token):自包含的声明式 token,广泛用于 SSO(单点登录)与微服务鉴权。
  • OAuth2:授权框架,便于第三方授权访问用户资源,不暴露用户凭据。

参考:鉴权方式对比(示例):https://mp.weixin.qq.com/s/Z6rt_ggCA8dNVJPgELZ44w

选型建议

  • 内网小型系统:Cookie+Session 足矣。
  • 跨域/开放接口:Token / JWT 更合适。
  • 第三方登录:OAuth2 为首选。

OAuth2(概述与漏洞)

定义

OAuth2 是一个授权框架,允许应用在不暴露用户凭证的情况下,获取对用户资源的有限访问权限。

四种授权模式

  1. authorization_code(授权码模式)
  2. implicit(简化模式)
  3. password(资源拥有者密码模式)
  4. client_credentials(客户端模式)

授权码模式(流程要点)

  • 用户授权 → 授权服务器返回 code → 客户端用 code 换取 access_token → 使用 access_token 访问资源。

常见安全缺陷与检测点

  1. redirect_uri 校验不严格 → code 被劫持或重定向到恶意站点。
  2. client_idredirect_uri 不一致或校验松散 → 被滥用。
  3. 跨应用重放:A 应用生成的 code 在 B 应用可用。
  4. state 缺失/校验不当 → CSRF 风险。
  5. scope 提权:低权限 code 被用于高权限场景。
  6. HTTP(非 TLS)传输导致中间人攻击。
  7. 点击劫持(Clickjacking):通过透明 iFrame 或覆盖按钮诱导用户授权。

Authorization 头与认证方案

常见认证方式

  1. Basic(基于用户名:密码,Base64 编码)
  2. Digest(基于挑战/响应,增加安全性)
  3. Bearer(通常与 OAuth2 access_token 配合)
  4. JWT(承载用户声明的自包含 token)
  5. API Key(静态密钥)
  6. 双因素认证(2FA)
  7. 其他扩展方案(HMAC 签名、Mutual TLS 等)

参考:Authorization 详解(示例):https://juejin.cn/post/7300812626279251987

常见风险

  • Token 劫持:Bearer/ JWT 在传输或存储不当时可被窃取并滥用。
  • JWT 攻防:弱签名算法、密钥泄露、未校验 alg、未校验 exp/iss/aud 等声明会带来风险。

安全影响与测试要点

  1. 抓包差异:理解 HTTP 与 HTTPS 的差异是抓包与流量分析的基础(是否能直接解密/查看明文)。
  2. 鉴权场景识别:在测试中区分 OAuth、JWT、Token、Cookie 等鉴权方式,采取不同测试策略(如重放、篡改、CSR F、签名伪造等)。
  3. 重点检测项redirect_uri 校验、state 用于防 CSRF、Token 生命周期与撤销、权限边界(scope)与签名验证。

推荐检测与加固措施(简要)

  • 强制 HTTPS 与 HSTS,避免使用明文 HTTP 传输敏感信息。
  • redirect_uri 做严格白名单校验与匹配。
  • 使用短期有效 token、刷新 token 机制与撤销策略。
  • JWT:正确选择签名算法(避免 none),保护私钥、校验 exp/iss/aud
  • 对敏感接口加入速率限制、异常访问检测与多因素认证(必要时)。

参考资料与扩展阅读