对于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注入的影响吗?
3条答案
按热度按时间pw9qyyiw1#
看起来SpringData的
@Query
只是JPA的一个 Package 器参见SO回答:Are SQL injection attacks possible in JPA?
ghhkc1vu2#
在查询中,您使用绑定变量而不是字符串连接(这将容易受到SQL注入的攻击),所以我认为您的示例在SQL注入的漏洞方面是保存的。
57hvy0tb3#
这取决于spring数据实现。您的示例在spring-data-couchbase中是安全的,因为spring-data-couchbase将保留sql字符串中的位置参数,并将参数设置为所提供参数的值。重写sql字符串并将位置参数替换为所提供参数的实现将是不安全的。
但是,@Query字符串中#{[ ]}的SPEL表达式将被提供的第(n+1)个参数替换,因此在任何实现中都不安全。