Spring 的JdbcTemplate抽象提供了很多功能,但它可以以提供对 SQL 注入攻击的保护的方式使用吗?
例如,就像使用PreparedStatement和正确定义的参数化获得的保护一样。
Spring 的JdbcTemplate抽象提供了很多功能,但它可以以提供对 SQL 注入攻击的保护的方式使用吗?
例如,就像使用PreparedStatement和正确定义的参数化获得的保护一样。
它肯定会。此示例直接来自 Spring 3.0 文档(但在 2.* 中相同):
String lastName = this.jdbcTemplate.queryForObject(
"select last_name from t_actor where id = ?",
String.class, 1212L);
如您所见,它强烈支持准备好的语句(它必须在幕后为您使用):您使用占位符 ( ?
) 指定参数并提供一个对象数组来填充参数。(最后一个参数是预期结果的类型,但这与这个问题不太相关。)
您还可以使用 aNamedParameterJdbcTemplate
并在 a 中提供参数Map
,这可能效率较低,但肯定更容易记忆。