在进一步软件测试中,对智康360的Service端进行了全面的测试调查,发现了部分存在安全隐患的软件漏洞,下面将进行具体介绍及提出修改建议。
问题剖析:
一.密码安全性问题
在测试中发现Service端用户登录的密码使用明文存储,存在一定的安全隐患;
为确保用户的隐私,提高软件使用的安全性,可以使用如下步骤:
1.导入密码加密工具类
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
引入 Spring Security 提供的 BCryptPasswordEncoder,该工具使用 BCrypt 哈希算法,能自动生成随机盐值,确保相同密码多次加密结果不同,且内置抗彩虹表攻击机制,保证了用户密码的安全性。
2.初始化密码编码器
private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
创建一个单例的 BCryptPasswordEncoder 实例供全局使用。
3.修改登录验证逻辑
if (!passwordEncoder.matches(account.getPassword(), dbAdmin.getPassword())) {
throw new CustomException(ResultCodeEnum.USER_ACCOUNT_ERROR);
}
比较用户输入的密码和数据库存储的加密密码是否匹配。
流程:
- account.getPassword():用户提交的原始密码(明文)。
- dbAdmin.getPassword():数据库存储的加密密码。
- passwordEncoder.matches():
-自动解析加密密码中的盐值。
-用相同算法对用户输入密码加密。
-比对结果是否一致。
使用上述用法,即使数据库泄露,攻击者也无法逆向破解原始密码。
二、批量删除优化
在测试中发现,管理员端在删除数据时,为循环单条删除。这样在需要进行大量的删除工作时,会导致软件的性能收到影响且事务安全不高。为解决这一隐患,可以在后端添加如下代码:
@Transactional
public void deleteBatch(List<Integer> ids) {
if (ids == null || ids.isEmpty()) { // 参数检查
return;
}
adminMapper.deleteBatchIds(ids); // 调用Mapper执行批量删除
}
同时需要配套的Mapper实现:
<!-- 在AdminMapper.xml中需要实现 -->
<delete id="deleteBatchIds">
DELETE FROM admin WHERE id IN
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
完成如上步骤后,可实现数据的批量删除,提高软件的性能。
以上便是本次的智康360软件测试结果,在不断的测试与优化中,智康360的功能逐步完善,为用户提供更加精准便捷的健康体验。