Sa-Token v1.40.0 发布 [特殊字符],来看看有没有令你心动的功能!

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证权限认证单点登录OAuth2.0微服务网关鉴权 等一系列权限相关问题。🔐

目前最新版本 v1.40.0 已发布至 Maven 中央仓库 🎉,大家可以通过如下方式引入:

<!-- Sa-Token 权限认证 -->
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.40.0</version>
</dependency>

该版本包含大量 ⛏️️️新增特性、⛏️️️️漏洞修复、⛏️️️代码优化 等,下面容我列举几条比较重要的更新内容供大家参阅:

🍪️ 更新点1:新增 Cookie 自定义属性支持

这是来自名为 “@massinger” 的用户创建的 GitHub issue #693
该开发者提出“是否可以为 Cookie 添加 Partitioned 属性,用于支持 iframe 嵌入跨域” 💡。

起初我以为 http 响应头 Cookie 参数只有 domainpathsecurehttpOnlysameSite 等几个扩展属性😶,
顺着这个 issue,我查阅了一下相关资料,这不查不知道,一查吓一跳 😱。

原来 Cookie 还有这么多我不知道的扩展属性🔍:

Cookie扩展属性

(参考文章:https://blog.csdn.net/fengbin2005/article/details/136544226)

本着“可扩展性”的原则,本次版本更新没有补充这些属性的配置定义,而是直接增加了一个 extraAttrs 字段,你可以借助该字段扩展任意自定义属性✨。

举个例子,如下代码配置:

sa-token: 
    cookie:
        domain: ""
        path: /
        secure: false
        httpOnly: true
        sameSite: Lax
        extraAttrs:
            Priority: Medium
            Partitioned: ""
            abc: def

将会促使 Sa-Token 框架生成以下格式的 Cookie 响应头🍪️:

Set-Cookie: satoken=4d1a2052-29e0-4302-9ecd-ac54dece5fde; Max-Age=2592000; Expires=Tue, 4 Mar 2025 00:49:03 +0800; Path=/; HttpOnly; SameSite=Lax; Priority=Medium; Partitioned; abc=def

🛡️ 更新点2:新增 SaFirewallStrategy 防火墙策略

危险 path 路径符校验是在最早 v1.37.0 就支持的功能,如果前端提交的请求 path 包含 “//、\、%2e、%2f、%5c、%25” 等特殊字符时,Sa-Token 全局过滤器将会截断请求,
返回类似 “非法请求:/test/login//” 的响应提示⚠️。

因为包含这些特殊字符的请求通常被用于路径遍历、请求绕行等网络攻击行为💻⚔️。

本次更新重构了该功能的架构设计,抽离了一个统一的 SaFirewallStrategy “防火墙”组件🧩,目前包含以下能力:

  • 请求 path 黑名单拦截。
  • 非法字符校验。
  • 白名单放行。

该组件在后续版本中还将计划增加ip校验、请求头校验等能力,并尝试引入 hooks 机制,以方便开发者更自由的进行功能扩展 🚀。

🔍 更新点3:新增对分号字符的 path 路径校验,以预防潜在的网络攻击

此功能提案来源于 “船山信安” 公众号的一篇漏洞报告📄:Sa-Token对url过滤不全存在的风险点 🔗

该文章指出了 Sa-Token 对包含 “;” 字符过滤不全存在的风险点⚠️:由于 Sa-Token 与底层 WebMVC 框架对 path 路径匹配的方式存在部分差异,
当前端提交的请求 path 中包含 “;” 字符,将可能导致请求绕过过滤器的权限检测,执行对应的 Controller 方法,从而导致越权问题💥。

目前在最新 v1.40.0 版本中已修复此问题,框架将从最顶层过滤器直接截断 path 中包含“;”字符的请求,避免鉴权被绕过的问题🔒。

感谢“船山信安”团队做出的贡献🙏🌟。

🚀 更新点4:新增 OAuth2 Client 前端测试页,助你快速对接调试 OAuth2-Server

对于刚刚接触 OAuth2 概念的初学者来说,不仅 OAuth2 Server 端的搭建比较困难,其接入与测试也是一件极其繁琐的事情😫。

OAuth2 对接涉及大量繁琐的参数拼接、响应报文解析等步骤,仅一个授权码式的对接,其调试过程可能也要可能耗费数小时乃至数天⏳。

为此,我们提供了一个专门对接 OAuth2 Server 的前端测试页🖥️:

OAuth2 前端测试页

该测试页允许你:

  • 1️⃣ 在前端直接配置 OAuth2 Server 的主机地址、授权页地址、token接口地址、Scope参数 等信息。
  • 2️⃣ 一键拼接授权URL地址,一键测试对应平台 授权码式、隐藏式、密码式和客户端凭证式 的完整授权流程。
  • 3️⃣ 离线化自由部署,所有代码均在前端实现,敏感数据全程不经过第三方服务器,完整开源可自由二开。

通过该测试页面,你将非常直观的 get 到 OAuth2 四种模式的对接步骤、响应报文等信息,帮助你快速定位和解决 OAuth2 对接流程中的大部分问题 💡✨。

详情可参考该视频:Sa-Token v1.40 新功能预览:OAuth2 四种模式 一键测试页 🔗

🤝 更新点5:新增 UnionId 联合 ID 实现,方便跨应用识别用户

此提案来自于一位开发者对 官网 sa-token 小助手的咨询 💬:

有关 UnionId 功能的 sa-token 小助手咨询

这位开发者在使用 Sa-Token 的 OAuth2 模块时,需要一个叫做 UnionId 的功能。简单来讲:UnionId 可以帮助开发者在同主体的多个应用下定位到同一用户 🔍。

作为立志要成为国内第一 java 权限认证框架的 Sa-Token 来讲,这是必须给安排上的💪🏆。

详情可参考该视频️:OAuth2 授权流程中的 clientId、openId、unionId、userId 都是干嘛的?Sa-Token v1.40 预览:新增unionid支持 🔗

🌐 更新点6:新增 OAuth2-Server 端前后台分离示例与文档

有 Web Page 服务的地方就有前后台分离,当然 OAuth2 也不例外🌍。

之前的版本 本质也是支持搭建 OAuth2-Server 端前后台分离服务的,但是由于官网仓库缺乏 Demo示例和相关介绍文档,导致 “OAuth2-Server 端能否前后台分离?” 成为点击量特别高的一个问题🔥。

OAuth2-Server 端能否前后台分离?微信咨询

参考 issue:

本次 v1.40.0 版本针对 OAuth2-Server 端的前后台分离搭建补充了详细的 demo示例📦 与 说明文档📚。

在线官网直达地址:OAuth2-Server 端前

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值