Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA查询故意离开SQL注入_Java_Spring Boot_Spring Data Jpa - Fatal编程技术网

Java JPA查询故意离开SQL注入

Java JPA查询故意离开SQL注入,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,嗨,斯塔克,我需要帮助 我正在构建一个故意易受攻击的本地应用程序。我需要一个参数来不进行验证,因为该应用程序将供开发人员测试SQL注入和XSS等安全漏洞。我正在努力寻找一种方法,使查询容易受到使用本地DB JPA UserRespository的SQL注入的攻击,但它允许我执行的唯一查询是以下内容 @Repository public interface UserRespository extends CrudRepository<User,Long>{ @Query(

嗨,斯塔克,我需要帮助

我正在构建一个故意易受攻击的本地应用程序。我需要一个参数来不进行验证,因为该应用程序将供开发人员测试SQL注入和XSS等安全漏洞。我正在努力寻找一种方法,使查询容易受到使用本地DB JPA UserRespository的SQL注入的攻击,但它允许我执行的唯一查询是以下内容

@Repository
public interface UserRespository extends CrudRepository<User,Long>{
  
    @Query(value="SELECT * FROM USERS WHERE name = :name", nativeQuery=false)
   User VulnerableQuery(String name);

}
@存储库
公共接口UserRespository扩展了CrudRespository{
@查询(value=“SELECT*FROM USERS,其中name=:name”,nativeQuery=false)
用户漏洞查询(字符串名称);
}

所以我实际上无法获得SQL注入。有人知道其他方法吗?

如果使用这样的本机查询:

@Query(value="SELECT * FROM USERS WHERE name = :?1", nativeQuery=true)

SQL注入在暴露持久层的任何一个上进行测试。对于Spring,您通常将持久性层公开到控制器中,例如REST端点。在那里,您可以测试SQL注入,而不是在repository(持久性层)类。实际上,我可以直接输入用户名,因为它不允许我尝试向REST端点发送任何您认为会造成破坏的内容。如果您已经在使用JPA和POJO与Spring,这是大狗的任务,而不是新手的任务。JPA+Hibernate和Spring很难通过SQL注入攻击。您可以直接在代码中编写本机查询。请看这里的答案:不,JPA没有问题。JPA正在尽最大努力防止SQL注入,但您仍然可以测试它以发现漏洞,就像它一样,不需要在存储库级别删除任何内容。JPA将任何JPQL查询转换为普通的SQL。因此,如果JPA中存在漏洞,您可以尽最大努力找到它。谁知道呢,也许你发现了一个漏洞。不,这仍然将名称作为参数传递。要引入漏洞,您需要用一种旧的、硬的、愚蠢的方式通过串联来构建查询。不,参数(这件事:
:?1
)是防注入的。看这个:啊,你是对的