在 Web 安全领域,看似平常的认证机制,背后却隐藏着错综复杂的风险与挑战,知己知彼,则百战不殆,只有了解其原理及攻击手法,才能提前预知风险。本文将重点剖析 Web 中的几种认证机制,核心重点分析的是 JWT 的原理、攻击手段及防范策略,同时简要介绍 HTTP Basic Auth 和 OAuth2 的基本概念。
一、常用web认证机制
HTTP Basic Auth 在HTTP中,基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式,通常用户名和明码会通过HTTP头进行base64编码传递验证。例如Tomcat管理登录页面就是,可以尝试进行爆破测试,当拿到管理权限质量,可以上传 war 包,获取系统权限。
二、OAuth2
OAuth 作为一种认证机制,极大地为用户向第三方网站或应用授予权限提供了便利,使用户能让第三方访问其在其他平台上的特定信息,同时巧妙规避了密码泄露风险。然而,没有绝对的安全,若使用不当可能带来安全风险。这里举例简单介绍一下.
下面是一个典型的 OAuth 授权请求链接:https://www.xxx.com/v2.0/dialog/oauth?client_id=123 &redirect_uri=https%3A%2F%2Fwww.example.com%2Foauth%2Fcallback &response_type=code&scope=email&state=XYZ
上述链接中包含了几个关键参数:
-
client_id:用以标识请求源自哪个站点,方便服务提供商精准识别调用方。
-
scope:清晰界定第三方应用可获取信息的范畴,比如能否访问用户的邮箱、好友列表等。
-
redirect_uri:用户完成授权流程后,将会被重定向到的 URL,一般是由第三方应用指定的回调地址。
-
code:第三方应用需将此代码发送给授权服务器(如 xxx.com),以此来换取访问令牌(token)。
-
token:第三方应用凭借该令牌向资源服务器(如 xxx.com)获取用户数据,资源服务器会对令牌的有效性予以验证。
-
state:其作用类似于 CSRF(跨站请求伪造)token,旨在防止恶意请求被篡改,切实保障请求的完整性与安全性。
针对上述链接,可以发现可能存在的漏洞有 redirect_uri 绕过引发的授权劫持、scope 设置不当导致越权访问、访问令牌泄露、客户端身份伪造等。攻击者一旦利用这些漏洞,便可能获取一些敏感信息或者当做跳板开展内部攻击。
三、JWT(Json web token)
JWT概述
Json Web Token(JWT)属于基于 token 的鉴权机制,设计精巧,兼具紧凑性与较高安全性。JWT 主要用于在身份提供者和服务提供者之间传递已认证的用户身份信息,进而协助从资源服务器获取资源。与传统基于 session 的认证方式不同,JWT 是无状态的认证机制,服务端无需留存用户会话数据,这一特性使得它在分布式系统以及移动端应用中得以广泛应用。相较于基于 session 的认证,JWT 在安全性与便捷性上优势显著,其认证流程可参考图中所示:
JWT结构
JSON Web 令牌由 Header(头部)、Payload(负载)和 Signature(签名)三部分构成,各部分之间以 “.” 分隔开来。前两部分均为 JSON 数据,经过 base64 编码后,构成 JWT 的前两部分,而 Signature 则是由前两部分编码后的字符串与一个密钥(secret),通过特定加密算法生成。例如:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
-
Header
头部主要涵盖两方面关键信息,其一为令牌类型,通常是 JWT;其二是所采用的签名算法。常见算法如下:
JWS 算法名称描述
HS256 HMAC256 HMAC with SHA-256
HS384 HMAC384 HMAC with SHA-384
HS512 HMAC512 HMAC with SHA-512
RS256 RSA256 RSASSA-PKCS1-v1_5 with SHA-256
RS384 RSA384 RSASSA-PKCS1-v1_5 with SHA-384
RS512 RSA512 RSASSA-PKCS1-v1_5 with SHA-512
ES256 ECDSA256 ECDSA with curve P-256 and SHA-256
ES384 ECDSA384 ECDSA with curve P-384 and SHA-384
ES512 ECDSA512 ECDSA with curve P-521 and SHA-512
-
Payload
Payload负载部分主要承载需传递的数据,以键值对形式呈现。JWT 不仅规定了七个默认字段可供选择,还支持添加三个私有字段。
iss:发行人(Issuer),用于标识 JWT 的签发主体。
exp:到期时间(Expiration Time),明确设定 JWT 的有效期限,一旦超过该时间,JWT 将被判定为无效。
sub:主题(Subject),用于描述 JWT 所涉及的核心内容,通常与用户相关信息紧密相连。
aud:受众(Audience),指明 JWT 的接收对象。
nbf:在此之前不可用(Not Before),表示在指定时间点之前,JWT 不应被处理。
iat:发布时间(Issued At),记录 JWT 的签发时刻。
jti:JWT ID,用于唯一标识该 JWT,有效防止重放攻击。
除默认字段外,还能添加私有字段,例如:
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)