查询从java spring引导应用程序的资源文件夹中的文件中读取。如何从下面代码中的Checkmarx防止此Sql注入错误?
@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注入攻击.
发布于 2022-09-17 18:06:42
Checkmarx可能会抱怨通过流来的SQL字符串。在这种特殊情况下,它来自jar中的一个资源文件,该资源文件可能是应用程序中的一个受信任的源。如果是这样,这是一个假阳性,你应该标记它不可利用(用适当的理由)。
https://stackoverflow.com/questions/73750725
复制相似问题