首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Checkmarx报表sql注入JpaRepository

Checkmarx报表sql注入JpaRepository
EN

Stack Overflow用户
提问于 2021-11-15 20:13:33
回答 1查看 467关注 0票数 0

我在我的代码上运行Checkmarx并获得一个sql注入漏洞。这是im使用的简化方法

代码语言:javascript
复制
public String assignRole(String userId, String roleId) {

Optional<RoleEntity> roleEntity = roleRepository.findById(roleId)

if (roleEntity.isPresent()) {
  UserEntity user = UserEntity.builder().userId(userId).role(roleEntity.get()).build();
  userRepository.save(user);
  return "SUCCESS";
} else {
  throw new ServiceException("ERROR");
}}

对检查单的分析表明:

应用程序的assignRole方法在src/Service.java的第xx行使用保存执行一个SQL查询。应用程序通过将不受信任的字符串嵌入到查询中而不进行适当的清理来构造此SQL查询。连接字符串被提交到数据库,并在数据库中进行相应的分析和执行。攻击者可以通过精心设计恶意有效负载并通过输入roleId提供恶意有效载荷,从而将任意语法和数据注入到SQL查询中;这可能会启用SQL注入攻击。

我有点困惑,因为我没有在查询中构建原生查询或连接字符串,或者我可能遗漏了什么。

有什么解决办法吗?或者可能是假阳性。

EN

回答 1

Stack Overflow用户

发布于 2022-05-03 05:39:18

这听起来像是假阳性。

如果您的Java代码使用Spring,我建议将扫描(设置>扫描设置>预设管理器)配置为禁用(未选中)的SQL_InjectionSQL_Injection项,以避免这些项出现错误。

如果您的代码仅通过Spring操作将数据保存到数据库,那么它就不会面临SQL注入攻击的风险。这是因为Spring使用映射到db的对象( ORM方法)将(插入或更新)保存到数据库,该对象不允许恶意地强制使用额外的sql。

尽管如此,据我所见,Checkmarx错误地将Spring标记为高度严重的SQL注入漏洞(SQL_Injection和/或Second_Order_SQL_Injection).有鉴于此,禁用这些规则在我看来是有效的,实际上也是解决这一问题的唯一可行方法。

但是,如果您确实采用了这种方法,请确保您的代码不会因为某种原因也使用其他一些其他的sql方法,例如包含通过使用PreparedStatement而未被净化的SQL的字符串。这些语句容易受到sql注入攻击的影响,我相信Checkmarx注入规则就是要识别的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69980310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档