【问题标题】:Is the @Query annotation in spring SQL Injection safe?Spring SQL注入中的@Query注解安全吗?
【发布时间】:2015-03-18 23:57:09
【问题描述】:

对于 Spring,传递给 @Query 注释的字符串参数是否会像使用 PreparedStatement 类或任何旨在防止 SQL 注入的方法时一样被视为纯数据?

final String MY_QUERY = "SELECT * FROM some_table WHERE some_column = ?1";

@Query(value=MY_QUERY, nativeQuery = true)
List<SomeEntity> findResults(String potentiallyMaliciousUserInput);

底线:上面的代码是否容易受到 SQL 注入的影响?

【问题讨论】:

  • MY_QUERY 不能是静态的吗?
  • @tkr 是的,我相信是的。我在尝试动态构建查询组件以输入 Query 时遇到了问题。我相信只有参数是您可以更改的。
  • 我实际上认为这是设计使然。这鼓励您不要使用字符串连接来构建 SQL,而是使用适当的准备好的语句参数。 (但我不太确定。)
  • @tkr 这也是我的猜测。它还可能与查询在运行时转换为 sql 语句的方式有关。我相信这种转换发生在 Spring bean 初始化时,这也是在您自己的代码实际执行之前。或者换一种说法,你的查询必须在 bean 初始化时间前准备好,减去准备好的参数。
  • 我查过了。 MY_QUERY 不能是静态的,而是最终的。

标签: java spring sql-injection spring-annotations


【解决方案1】:

在查询中,您使用绑定变量而不是字符串连接(这将容易受到 SQL 注入的攻击),所以我认为您的示例是为了避免 SQL 注入的漏洞。

【讨论】:

    【解决方案2】:

    看起来 Spring Data 的 @Query 只是 JPA 的包装器

    看到这个答案:Are SQL injection attacks possible in JPA?

    【讨论】:

    • 问题中的例子是安全的还是不安全的?
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多