java spring SQL Injection中的@Query注解安全吗?

z8dt9xmd  于 2022-12-25  发布在  Java
关注(0)|答案(3)|浏览(168)

对于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注入的影响吗?

pw9qyyiw

pw9qyyiw1#

看起来SpringData的@Query只是JPA的一个 Package 器
参见SO回答:Are SQL injection attacks possible in JPA?

ghhkc1vu

ghhkc1vu2#

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

57hvy0tb

57hvy0tb3#

这取决于spring数据实现。您的示例在spring-data-couchbase中是安全的,因为spring-data-couchbase将保留sql字符串中的位置参数,并将参数设置为所提供参数的值。重写sql字符串并将位置参数替换为所提供参数的实现将是不安全的。
但是,@Query字符串中#{[ ]}的SPEL表达式将被提供的第(n+1)个参数替换,因此在任何实现中都不安全。

相关问题