首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NamedParameterJdbcTemplate从文件读取参数化查询解决Checkmarx中的SQL注入错误

使用NamedParameterJdbcTemplate从文件读取参数化查询解决Checkmarx中的SQL注入错误
EN

Stack Overflow用户
提问于 2022-09-16 22:08:40
回答 1查看 242关注 0票数 0

查询从java spring引导应用程序的资源文件夹中的文件中读取。如何从下面代码中的Checkmarx防止此Sql注入错误?

代码语言:javascript
复制
@Repository
public class ItemRepository {

  @Autowired
  NamedParameterJdbcTemplate jdbcTemplate;

  public List<Item> getData(String action) {
    String sql = IOUtils.toString(getClass().getResourceAsStream("queries/query.sql"));
    MapSqlParameterSource parameters = new MapSqlParameterSource();
    parameters.addValue("action", action, Types.VARCHAR);

    try {
      List<Item> items = jdbcTemplate.query(sql, parameters, new ItemMapper());
      return items;
    } catch (EmptyResultDataAccessException ex) {
      return new ArrayList<>();
    }
  }
}

错误消息:

应用程序的getData方法在ItemRepository.java的第13行使用query执行SQL查询。应用程序通过将不受信任的字符串嵌入到查询中而不进行适当的清理来构造此SQL查询。连接字符串被提交到数据库,并在数据库中进行相应的分析和执行。

攻击者可以通过精心设计恶意有效负载并通过输入toString提供该有效负载,从而将任意语法和数据注入SQL查询;然后,getData方法将在ItemRepository.java的第8行读取该输入。然后,这个输入通过代码流到查询和数据库服务器,而不需要清理。

这可能启用SQL注入攻击.

EN

回答 1

Stack Overflow用户

发布于 2022-09-17 18:06:42

Checkmarx可能会抱怨通过流来的SQL字符串。在这种特殊情况下,它来自jar中的一个资源文件,该资源文件可能是应用程序中的一个受信任的源。如果是这样,这是一个假阳性,你应该标记它不可利用(用适当的理由)。

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

https://stackoverflow.com/questions/73750725

复制
相关文章

相似问题

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