19
Spring的JdbcTemplate抽象提供了很多功能,但是它可以以防止SQL注入攻击的方式使用吗?Spring JDBC是否提供对SQL注入攻击的防护?
例如,您可以使用PreparedStatement和正确定义的参数化的保护类型。
Spring的JdbcTemplate抽象提供了很多功能,但是它可以以防止SQL注入攻击的方式使用吗?Spring JDBC是否提供对SQL注入攻击的防护?
例如,您可以使用PreparedStatement和正确定义的参数化的保护类型。
它当然是。这个例子是直接从春季3.0文档(但在2 *同):
String lastName = this.jdbcTemplate.queryForObject(
"select last_name from t_actor where id = ?",
String.class, 1212L);
正如你所看到的,它强烈青睐预处理语句(必须使用在幕后为你哪):用占位符(?
)指定参数并提供一组对象以填充参数。 (最后一个参数是预期结果的类型,但是这不是对这个问题很重要。)
你也可以使用一个NamedParameterJdbcTemplate
并在Map
,这也许是效率较低,但肯定更记忆提供的参数。
酷 - 最主要的是,在Spring的API中使用参数化方法必须映射到底层Java PreparedStatements中的参数化方法,以保护保护。 – Brabster
他们应该做的; Spring的所有关于以更方便的方式实现最佳实践,并且已经建议使用PreparedStatement ...我记得尽管相当挑剔,我仍然在第一版Java 1.1中遇到的JDBC中建议使用它。 (我不知道所有的JDBC驱动程序是否都能正确使用它,但如果不这样做,我会认为这是一个不使用它的理由。) –