首页 文章

哪一个更安全的SQL注入-namedParameterJdbcTemplate或SimpleJdbcTemplate?

提问于
浏览
4

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);

要么

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

第一个使用NamedParameterJdbcTemplate,而第二个使用SimpleJdbcTemplate . 在某些网站中,它的给定与两者相同,在其他一些网站中,NamedParameterJdbcTemplate是安全的 . 任何人都可以清楚我的怀疑吗?

2 回答

  • 4

    我相信没有区别,因为它们都与SQL注入保护无关 . 它是在底层驱动程序的PreparedStatement中实现的 .

    例如,您可以查看com.mysql.jdbc.PreparedStatement #setString() .

  • 3

    两者都使用 Preparedstatement 来执行查询 . 这些是防止SQL注入的东西 . 所以SQL注入没有区别 .

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

    不推荐 . 从Spring 3.1开始,赞成JdbcTemplate和NamedParameterJdbcTemplate . JdbcTemplate和NamedParameterJdbcTemplate现在提供SimpleJdbcTemplate的所有功能 .

    所以你应该使用NamedParameterJdbcTemplate,因为它没有被删除 . (遗留代码可能仍然使用它,但是)

相关问题