我意识到可以将手动构造的字符串传递给易受攻击的execute(String)
。但是我对使用MapSqlParameterSource或其他一些公开方法(如下面的示例)中的参数传递参数感兴趣。深入研究来源,看起来它们正在使用每个中的预备语句,所以我认为注入是不可能的。但是我不是安全专家所以只是想确认一下。
示例1:
getSimpleJdbcTemplate().queryForObject("SELECT * FROM table WHERE value = ?",
new ObjectMapper(), code);
示例2:
getSimpleJdbcTemplate()
.update(
"insert into table "
+ "(column1, column2, column3, column4, column5) VALUES "
+ "(:column1, :column2, :column3, :column4, :column5)",
new MapSqlParameterSource().addValue("column1",
value1).addValue("column2",
value2).addValue("column3",
value3).addValue("column4",
value4).addValue("column5", value5));
答案 0 :(得分:7)
是的,上面的代码可以安全地注入 - 它使用参数绑定。