Spring JDBC 是否提供任何针对 SQL 注入攻击的保护?

发布于 2024-12-02 03:49:23 字数 369 浏览 2 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉态萌生 2024-12-09 03:49:23

确实如此。这个例子直接来自 Spring 3.0 文档(但在 2.* 中是相同的):

String lastName = this.jdbcTemplate.queryForObject( 
        "select last_name from t_actor where id = ?", 
        String.class, 1212L); 

正如您所看到的,它强烈支持准备好的语句(它必须在幕后为您使用):您可以使用占位符 (?) 指定参数,并提供一个对象数组来填充参数。 (最后一个参数是预期结果的类型,但这与这个问题不太相关。)

您还可以使用 NamedParameterJdbcTemplate 并在 Map 中提供参数,这可能效率较低,但绝对更容易记忆。

It most certainly does. This example is straight from the Spring 3.0 docs (but is the same in 2.*):

String lastName = this.jdbcTemplate.queryForObject( 
        "select last_name from t_actor where id = ?", 
        String.class, 1212L); 

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 a Map, which is perhaps less efficient but definitely more mnemonic.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文