Java Spring JPA@Query和@Param字符串转义(sql注入)

Java Spring JPA@Query和@Param字符串转义(sql注入),java,spring,jpa,Java,Spring,Jpa,下午好 我相信结合使用org.springframework.data.jpa.repository.Query和org.springframework.data.repository.Query.Param可以防止SQL注入超过这些参数。 例如: @Query(“删除用户c,其中c.issuer=:issuer和c.subject=:subject”) void deletebyissub(@Param(“发行人”)字符串发行人,@Param(“主题”)字符串主题); 应该是安全的。如果我错

下午好

我相信结合使用
org.springframework.data.jpa.repository.Query
org.springframework.data.repository.Query.Param
可以防止SQL注入超过这些参数。
例如:

@Query(“删除用户c,其中c.issuer=:issuer和c.subject=:subject”)
void deletebyissub(@Param(“发行人”)字符串发行人,@Param(“主题”)字符串主题);
应该是安全的。如果我错了,请纠正我

现在我正在寻找文档,其中描述了@Param与@Query结合使用可以防止SQL注入(抛出字符串转义)。 但是我没有找到这个文档

我错了吗

这有帮助吗?

默认情况下

使用参数(=:)

设置参数时(.setParameter(“发卡机构”,发卡机构))

在您的代码中,将SQL注入的更改减少到0,因为您是通过代码生成查询的,所以您不允许用户以更改的形式向数据库发送任何查询,他只能发送参数,并且只能发送预期参数

只要您避免使用字符串连接构建动态查询,您将是安全的,但如果您确实需要使用动态查询,则需要使用CriteriaAPI

编辑: 没有人能为您保证这一点,因为我引用了OWASP页面上的话: “Hibernate不授予SQL注入豁免权,人们可以随意滥用API。” 所以没有人会说它是100%防弹的,因为人们可以编写和使用API,因为它不应该被使用或设计。

谁是OWASP? OWASP®基金会致力于通过其社区主导的开源软件项目、全球数百个章节、胡万会员和主办本地和全球会议来提高软件的安全性。
无论一辆车有多安全,制造商永远不会说“我们的车是不可擦伤的”,他们只会说它真的是安全的。安全也是如此。考虑到人为因素,没有什么是100%安全的。

谢谢,但这不是我想要的。我正在寻找一个文档或API,在这里我可以看到@Query和@Param可以安全使用。有点像证据。不仅仅是论坛上的答案或类似setParameter方法的参考。。。我发现文档中说,setParameter是save:我将更新我的答案,只是为了向您提供更多信息,说明为什么您在文档中找不到任何证据。另外,Baeldung不是一个文档,它是一个网站,在这个网站上,获得版主许可的程序员可以发布他们的示例以换取现金。好的,谢谢。我明白你的意思。我在想,这样的事情一定是丢失信息的原因。我不需要承诺,一切都是安全的,但我会有一种好的感觉,当我找到一个点时,有人写道他们知道SQL注入的问题,他们建立了一些机制来防止它。否则,我会认为作者并不关心SQL注入,而是将这一责任转交给使用该库的程序员。