Spring中的SimpleJdbcTemplate是否可以安全地从SQL注入?

时间:2010-10-24 10:21:53

标签: java sql spring sql-injection

我意识到可以将手动构造的字符串传递给易受攻击的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));

1 个答案:

答案 0 :(得分:7)

是的,上面的代码可以安全地注入 - 它使用参数绑定。