JdbcTemplate动态表名和SQL注入

xte*_*xte 6 sql database spring sql-injection jdbctemplate

我对 Spring 的 JdbcTemplate 的 SQL 注入有一些类似的代码的担忧:

jdbcTemplate.query("SELECT * FROM " + tableName, new TableMapper());
Run Code Online (Sandbox Code Playgroud)

“tableName”变量是通过串联添加的,因为无法将其作为 JdbcTemplate 的参数传递。

“tableName”变量只能由管理员编辑,但我想知道技术上是否可以对此查询进行 SQL 注入攻击。

否则你能描述一种安全的方法吗?

Ber*_*gan -7

对的,这是可能的。我建议像这样修改你的代码:

jdbcTemplate.query("SELECT * FROM ?", new Object[]{tableName},new TableMapper());
Run Code Online (Sandbox Code Playgroud)

这会将 tableName 安全地插入到您的查询中;)

  • 不幸的是,无法将表名作为 jdbc - jdbcTemplate 中的参数传递。其他参数作为参数传递,但表名称不能以这种方式传递。 (5认同)