qinglong/back/loaders
rockymelody ce599d306f
青龙面板鉴权绕过漏洞已修复 (#2935)
已实施的安全加固措施
第一层防御:启用Express严格路由(第17-18行)
app.set('case sensitive routing', true);  // 路由大小写敏感
app.set('strict routing', true);           // 严格路由匹配
第二层防御:路径标准化检查中间件(第23-37行)
app.use((req, res, next) => {
  const originalPath = req.path;
  const normalizedPath = originalPath.toLowerCase();

  // 检测并拦截大小写混淆攻击
  if (originalPath !== normalizedPath &&
      (normalizedPath.startsWith('/api/') || normalizedPath.startsWith('/open/'))) {
    return res.status(400).json({
      code: 400,
      message: 'Invalid path format'
    });
  }

  next();
});
作用:主动检测并拒绝含有大小写变体的恶意请求
第三层防御:JWT中间件正则表达式修复(第59行)
// 修复前:
path: [...config.apiWhiteList, /^\/(?!api\/).*/],

// 修复后:添加大小写不敏感标志 'i'
path: [...config.apiWhiteList, /^(\/(?!api\/).*)$/i],
作用:防御正则匹配层面的绕过
第四层防御:自定义Token中间件路径标准化(第74-87行)
// 修复前:
if (!['/open/', '/api/'].some((x) => req.path.startsWith(x))) {

// 修复后:统一转小写比较
const pathLower = req.path.toLowerCase();
if (!['/open/', '/api/'].some((x) => pathLower.startsWith(x))) {
}
作用:确保Token验证逻辑对所有路径变体生效

第五层防御:初始化接口路径检查修复(第122-123行)
// 修复前:
if (!['/api/user/init', '/api/user/notification/init'].includes(req.path)) {

// 修复后:
const pathLower = req.path.toLowerCase();
if (!['/api/user/init', '/api/user/notification/init'].includes(pathLower)) {
2026-03-01 17:44:03 +08:00
..
app.ts 修改服务启动逻辑 2025-05-07 09:30:00 +08:00
bootAfter.ts 定时任务支持 @once 和 @boot 任务 2025-02-20 02:18:59 +08:00
db.ts Fix task duplication: add single/multi-instance support with UI configuration and stop all running instances (#2837) 2025-11-19 00:10:27 +08:00
depInjector.ts 添加订阅管理前端 2022-05-08 09:41:06 +08:00
deps.ts 移除用户判断 2025-11-15 17:02:00 +08:00
express.ts 青龙面板鉴权绕过漏洞已修复 (#2935) 2026-03-01 17:44:03 +08:00
initData.ts 修复模块注入 2025-10-26 22:32:03 +08:00
initFile.ts 修复创建脚本可能失败 2025-05-20 01:00:08 +08:00
initTask.ts Add global SSH key configuration in system settings (#2840) 2025-11-20 10:09:01 +08:00
logger.ts 修改服务启动逻辑 2025-05-07 09:30:00 +08:00
server.ts 修改系统重启逻辑 2024-03-14 17:37:52 +08:00
sock.ts 修复 cron-parser import,websocket basepath 2025-12-23 00:28:16 +08:00