HTTP / HTTPS
区别
-
加密方式
- HTTP:使用明文传输,数据在传输过程中可被截获和查看。
- HTTPS:通过 SSL/TLS 协议对数据进行加密,确保传输安全性与完整性。
-
身份验证
- HTTP:不自带身份验证,任何人可访问(取决于应用层控制)。
- HTTPS:通过数字证书(CA 签发)+ SSL/TLS 握手验证服务器身份,降低中间人(MITM)风险。
-
端口号
- 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 是一个授权框架,允许应用在不暴露用户凭证的情况下,获取对用户资源的有限访问权限。
四种授权模式
- authorization_code(授权码模式)
- implicit(简化模式)
- password(资源拥有者密码模式)
- client_credentials(客户端模式)
授权码模式(流程要点)
- 用户授权 → 授权服务器返回
code→ 客户端用code换取access_token→ 使用access_token访问资源。
常见安全缺陷与检测点
redirect_uri校验不严格 → code 被劫持或重定向到恶意站点。client_id与redirect_uri不一致或校验松散 → 被滥用。- 跨应用重放:A 应用生成的 code 在 B 应用可用。
state缺失/校验不当 → CSRF 风险。scope提权:低权限 code 被用于高权限场景。- HTTP(非 TLS)传输导致中间人攻击。
- 点击劫持(Clickjacking):通过透明 iFrame 或覆盖按钮诱导用户授权。
Authorization 头与认证方案
常见认证方式
- Basic(基于用户名:密码,Base64 编码)
- Digest(基于挑战/响应,增加安全性)
- Bearer(通常与 OAuth2 access_token 配合)
- JWT(承载用户声明的自包含 token)
- API Key(静态密钥)
- 双因素认证(2FA)
- 其他扩展方案(HMAC 签名、Mutual TLS 等)
参考:Authorization 详解(示例):https://juejin.cn/post/7300812626279251987
常见风险
- Token 劫持:Bearer/ JWT 在传输或存储不当时可被窃取并滥用。
- JWT 攻防:弱签名算法、密钥泄露、未校验
alg、未校验exp/iss/aud等声明会带来风险。
安全影响与测试要点
- 抓包差异:理解 HTTP 与 HTTPS 的差异是抓包与流量分析的基础(是否能直接解密/查看明文)。
- 鉴权场景识别:在测试中区分 OAuth、JWT、Token、Cookie 等鉴权方式,采取不同测试策略(如重放、篡改、CSR F、签名伪造等)。
- 重点检测项:
redirect_uri校验、state用于防 CSRF、Token 生命周期与撤销、权限边界(scope)与签名验证。
推荐检测与加固措施(简要)
- 强制 HTTPS 与 HSTS,避免使用明文 HTTP 传输敏感信息。
- 对
redirect_uri做严格白名单校验与匹配。 - 使用短期有效 token、刷新 token 机制与撤销策略。
- JWT:正确选择签名算法(避免
none),保护私钥、校验exp/iss/aud。 - 对敏感接口加入速率限制、异常访问检测与多因素认证(必要时)。
参考资料与扩展阅读
- OAuth2 官方规范与授权流程图(建议阅读 RFC 与厂商文档)。
- Authorization 头详解文章(示例):https://juejin.cn/post/7300812626279251987
- 鉴权方式对比(示例):https://mp.weixin.qq.com/s/Z6rt_ggCA8dNVJPgELZ44w