Skip to content

UserController.java:importUser未鉴权,可能导致普通用户向数据库导入用户数据 #34

Description

@old6ma

问题描述
在UserController.java中的importUser函数及其callee"UserServiceImpl.java:importUser"函数未对当前用户的身份进行权限检查,可能导致普通用户也可以向数据库导入用户数据,具体表现如下:
用户调用importUser接口:
@PostMapping("import-user") @ApiOperationSupport(order = 12) @Operation(summary = "导入用户", description = "传入excel") public R importUser(MultipartFile file, Integer isCovered) { String filename = file.getOriginalFilename(); if (StringUtil.isBlank(filename)) { throw new RuntimeException("请上传文件!"); } if ((!StringUtils.endsWithIgnoreCase(filename, ".xls") && !StringUtils.endsWithIgnoreCase(filename, ".xlsx"))) { throw new RuntimeException("请上传正确的excel文件!"); } InputStream inputStream; try { UserImportListener importListener = new UserImportListener(userService); inputStream = new BufferedInputStream(file.getInputStream()); ExcelReaderBuilder builder = EasyExcel.read(inputStream, UserExcel.class, importListener); builder.doReadAll(); } catch (IOException e) { e.printStackTrace(); } return R.success("操作成功"); }
该函数随后通过importListener的invoke函数并调用UserServiceImpl.java的importUser函数直接向数据库导入数据:
@Override public void invoke(UserExcel data, AnalysisContext context) { list.add(data); // 达到BATCH_COUNT,则调用importer方法入库,防止数据几万条数据在内存,容易OOM if (list.size() >= batchCount) { // 调用importer方法 userService.importUser(list); // 存储完成清理list list.clear(); } }
public void importUser(List<UserExcel> data) { data.forEach(userExcel -> { User user = Objects.requireNonNull(BeanUtil.copyProperties(userExcel, User.class)); // 设置部门ID user.setDeptId(sysClient.getDeptIds(userExcel.getTenantId(), userExcel.getDeptName())); // 设置岗位ID user.setPostId(sysClient.getPostIds(userExcel.getTenantId(), userExcel.getPostName())); // 设置角色ID user.setRoleId(sysClient.getRoleIds(userExcel.getTenantId(), userExcel.getRoleName())); // 设置默认密码 user.setPassword(CommonConstant.DEFAULT_PASSWORD); this.submit(user); }); }
其中整个调用链中没有进行权限检查,可能存在普通用户也可以随意向数据库中导入用数据的情况,影响数据安全性

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions