Spring JDBC 是否提供任何针对 SQL 注入攻击的保护?
Spring 的 JdbcTemplate 抽象提供了很多功能,但是它的使用方式是否可以提供针对 SQL 注入攻击的保护?
例如,就像使用 PreparedStatement 和正确定义的参数化所获得的保护一样。
Spring's JdbcTemplate abstraction provides a lot of functionality, but can it be used in such a way that provides protection from SQL injection attacks?
For example, like the kind of protection you would get using PreparedStatement with properly defined parameterization.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
确实如此。这个例子直接来自 Spring 3.0 文档(但在 2.* 中是相同的):
正如您所看到的,它强烈支持准备好的语句(它必须在幕后为您使用):您可以使用占位符 (
?
) 指定参数,并提供一个对象数组来填充参数。 (最后一个参数是预期结果的类型,但这与这个问题不太相关。)您还可以使用
NamedParameterJdbcTemplate
并在Map
中提供参数,这可能效率较低,但绝对更容易记忆。It most certainly does. This example is straight from the Spring 3.0 docs (but is the same in 2.*):
As you can see, it strongly favors prepared statements (which it must be using behind the scenes for you): you specify the parameters with placeholders (
?
) and supply an array of objects to fill into the parameters. (The last parameter is the type of the expected result, but that's not very relevant for this question.)You can also use a
NamedParameterJdbcTemplate
and supply the parameters in aMap
, which is perhaps less efficient but definitely more mnemonic.