From f103c8c1e09e2475dc4ac4d3ddc1598146e4da38 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 28 八月 2026 15:55:12 +0800
Subject: [PATCH] 修复系统越权访问漏洞
---
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java | 25 +++++++++++++++++++++++++
1 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
index 2a9d1a6..90cbfb3 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -38,6 +38,9 @@
@Component
public class AuthFilter implements GlobalFilter, Ordered {
private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
+
+ /** 小程序token可访问的管理后台路径前缀白名单 */
+ private static final String[] APPLET_SYSTEM_WHITELIST = { "/system/faq/" };
// 排除过滤的 uri 地址,nacos自行添加
@Autowired
@@ -81,6 +84,11 @@
String userid = JwtUtils.getUserId(claims);
String username = JwtUtils.getUserName(claims);
String userType = JwtUtils.getUserType(claims);
+
+ // 小程序token禁止访问管理后台 /system/** 接口(白名单除外)
+ if ("applet".equals(userType) && !isAppletAllowed(url)) {
+ return unauthorizedResponse(exchange, "无权限访问该接口");
+ }
// 设置用户信息到请求
addHeader(mutate, SecurityConstants.USER_KEY, userkey);
@@ -91,6 +99,23 @@
removeHeader(mutate, SecurityConstants.FROM_SOURCE);
return chain.filter(exchange.mutate().request(mutate.build()).build());
}
+
+ /**
+ * 小程序token是否允许访问该路径
+ * @param url 请求路径
+ * @return true=允许
+ */
+ private boolean isAppletAllowed(String url) {
+ if (!url.startsWith("/system/")) {
+ return true;
+ }
+ for (String whitelist : APPLET_SYSTEM_WHITELIST) {
+ if (url.startsWith(whitelist)) {
+ return true;
+ }
+ }
+ return false;
+ }
private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value) {
if (value == null) {
--
Gitblit v1.7.1