从SQL注入NamedParameterJdbcTemplate或SimpleJdbcTemplate中哪一个更安全?

Mah*_*nan 4 java spring sql-injection spring-jdbc jdbctemplate

SQL注入中哪一个是安全的:NamedParameterJdbcTemplate或SimpleJdbcTemplate?

例如,

String sql = "insert into db_table (associateid,comment) values(:associateId,:comments)";
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("associateId", "12345");
paramMap.put("comments", "some comments");
int rowNumber = readTemplate.update(sql, paramMap);
Run Code Online (Sandbox Code Playgroud)

要么

String sql = "insert into db_table (associateid,comment) values(?,?)";
int rowNumber = readTemplate.update(sql,new Object[] {"comments","some comments"} );
Run Code Online (Sandbox Code Playgroud)

第一个使用NamedParameterJdbcTemplate,而第二个使用SimpleJdbcTemplate。在某些站点中,两者给出的名称相同,在另一些站点中,NamedParameterJdbcTemplate是安全的。谁能消除我的疑虑?

Koo*_*laa 5

两者都使用Preparedstatements执行查询。这些是防止sql注入的措施。因此,在SQL注入方面没有区别。

但是,如果您查看SimpleJdbcTemplate的文档:

不推荐使用。
从Spring 3.1
开始支持JdbcTemplate和NamedParameterJdbcTemplate。现在,JdbcTemplate和NamedParameterJdbcTemplate提供了SimpleJdbcTemplate的所有功能。

因此,您应该使用NamedParameterJdbcTemplate,因为它不会被取消使用。(但是,旧版代码可能仍会使用它)