Browse Source

安全扫描处理

dev-v1.0.2
庄锐波 3 months ago
parent
commit
5479fb72b8
  1. 20
      doc/部署说明/安全扫描.md
  2. 4
      zdxt-common/zdxt-common-satoken/src/main/resources/common-satoken.yml
  3. 4
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/LoginController.java
  4. 2
      zdxt-web-client/zdxt-admin-plus-ui/.env.development
  5. 2
      zdxt-web-client/zdxt-admin-plus-ui/.env.development-zrb-cust
  6. 2
      zdxt-web-client/zdxt-admin-plus-ui/.env.production
  7. 35
      zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/listener/UserActionListener.java

20
doc/部署说明/安全扫描.md

@ -0,0 +1,20 @@
执法/企业端:
1: 支持较老的 TLS 版本- 中 (已改)
2: 未实施加密- 中 (一期的https问题. 不好改变当前生产环境)
3: 检测到 SHA-1 密码套件- 中 (已改)
监督端:
1: JWT中的弱签名(3个) - 高 (已改)
2: JWT过期(3个) - 高 (已改)
3: 易受攻击的组件(2个) - 高
4: 查询中的密码参数 - 高
5: SRI (Subresource Integrity) 的检查 - 中
主机:
.25: waf 我们动不了
- SSLV2和SSLV3 协议检测【原理扫描】 - 高
- 目标使用过期的TLS1.0 版协议【原理扫描】 - 中
.19: 目标主机showmount -e信息泄露(CVE-1999-0554) - 高 (同步服务器)
.3: 目标使用过期的TLS1.0 版协议【原理扫描】 - 中 (已改)
.6: SSH 服务支持弱加密算法【原理扫描】 - 中 (已改)
.5: SSH 服务支持弱加密算法【原理扫描】 - 中 (已改)

4
zdxt-common/zdxt-common-satoken/src/main/resources/common-satoken.yml

@ -1,8 +1,8 @@
# 内置配置 不允许修改 如需修改请在 nacos 上写相同配置覆盖
# Sa-Token配置
sa-token:
# token有效期(单位:秒) 默认7
timeout: 604800
# token有效期(单位:秒) 默认1
timeout: 86400
# token最低活跃频率(单位:秒) 默认30分钟无操作则过期
active-timeout: 1800
# 允许动态设置 token 有效期

4
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/LoginController.java

@ -30,9 +30,9 @@ public abstract class LoginController {
/**
* App端token固定超时时间单位 7
* App端token固定超时时间单位 1
*/
protected static final long APP_TOKEN_TIMEOUT = 604800;
protected static final long APP_TOKEN_TIMEOUT = 86400;
/**
* App端token活跃超时时间单位 30分钟

2
zdxt-web-client/zdxt-admin-plus-ui/.env.development

@ -36,4 +36,4 @@ VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
VITE_APP_WEBSOCKET = false
# sse 开关
VITE_APP_SSE = true
VITE_APP_SSE = false

2
zdxt-web-client/zdxt-admin-plus-ui/.env.development-zrb-cust

@ -34,4 +34,4 @@ VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
VITE_APP_WEBSOCKET = false
# sse 开关
VITE_APP_SSE = true
VITE_APP_SSE = false

2
zdxt-web-client/zdxt-admin-plus-ui/.env.production

@ -36,4 +36,4 @@ VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
VITE_APP_WEBSOCKET = false
# sse 开关
VITE_APP_SSE = true
VITE_APP_SSE = false

35
zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/listener/UserActionListener.java

@ -6,6 +6,7 @@ import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.core.convert.Convert;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import cn.dev33.satoken.jwt.exception.SaJwtException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.CacheConstants;
@ -81,10 +82,16 @@ public class UserActionListener implements SaTokenListener {
*/
@Override
public void doLogout(String loginType, Object loginId, String tokenValue) {
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY));
TenantHelper.dynamic(tenantId, () -> {
try {
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY));
TenantHelper.dynamic(tenantId, () -> {
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
});
} catch (SaJwtException e) {
// token已过期时直接删除缓存(不依赖租户隔离)
log.warn("doLogout时JWT已过期, 直接清理在线缓存, userId:{}", loginId);
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
});
}
log.info("user doLogout, userId:{}, token:{}", loginId, tokenValue);
}
@ -93,10 +100,15 @@ public class UserActionListener implements SaTokenListener {
*/
@Override
public void doKickout(String loginType, Object loginId, String tokenValue) {
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY));
TenantHelper.dynamic(tenantId, () -> {
try {
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY));
TenantHelper.dynamic(tenantId, () -> {
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
});
} catch (SaJwtException e) {
log.warn("doKickout时JWT已过期, 直接清理在线缓存, userId:{}", loginId);
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
});
}
log.info("user doKickout, userId:{}, token:{}", loginId, tokenValue);
}
@ -105,10 +117,15 @@ public class UserActionListener implements SaTokenListener {
*/
@Override
public void doReplaced(String loginType, Object loginId, String tokenValue) {
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY));
TenantHelper.dynamic(tenantId, () -> {
try {
String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY));
TenantHelper.dynamic(tenantId, () -> {
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
});
} catch (SaJwtException e) {
log.warn("doReplaced时JWT已过期, 直接清理在线缓存, userId:{}", loginId);
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
});
}
log.info("user doReplaced, userId:{}, token:{}", loginId, tokenValue);
}

Loading…
Cancel
Save