Spring Data JPA是否安全防止SQL注入攻击?

23

我正在寻找关于Spring Security JPA的信息,想知道像.save()这样的方法是否受到SQL注入的保护。

例如,我有一个名为Customer的对象,我想将其持久化到我的数据库中。 我正在使用CustomerRepository Spring实现来操作该实体。 Customer的构造函数使用来自用户的参数。当一切准备就绪时,我会调用.save()。这种方法是否安全,能否防止SQL注入?还是应该先检查一下?

1个回答

20

.save() 是安全的,只有使用本地查询才存在漏洞。

List results = entityManager.createNativeQuery("Select * from Customer where name = " + name).getResultList();

如果您使用参数,还可以使本地查询更安全。

Query sqlQuery = entityManager.createNativeQuery("Select * from Customer where name = ?", Customer.class);
List results = sqlQuery.setParameter(1, "John Doe").getResultList();

如果客户对象有一个名为“name”的字段,并且它被设置为字符串:“Select * from Customer where name = 'test'”,并且我使用save()方法,表格不会出现任何问题吗? - Dago
JDBC驱动程序将在执行查询之前适当地转义此数据; - jklee
这里的问题是当字符串name = "'Cosmin' or name='Jhon'"时。 - Cosmin Oprea
CrudRepository 的方法,如 .save() 和 .delete(),是否安全,可以防止 SQL 注入攻击? - fatih yavuz
4
@jklee,你能提供你所述论点的参考资料吗?看起来很难找到。 - Dan Ortega

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接