Hibernate 命名查询和 Spring 数据 SQL 注入
Hibernate Named Query and Spring Data SQL injection
我想在我的应用程序中添加自动完成搜索功能。对于此功能,我使用了 NamedQuery("userSuggest")。在 JpaRepository 中,我定义了一个带有一个参数的方法("userSuggest")。
这是我的代码:
@Entity
@NamedQueries({
@NamedQuery(name = "User.userSuggest", query = "select u from User u where u.userName like :userName") })
public class User implements java.io.Serializable {
private Integer userId;
private String userName;
setter and getter ...
}
和
@Repository("userRepository")
public interface UserRepository extends JpaRepository<User, Integer> {
List<Gene> userSuggest(@Param("userName") String userName);
}
我通过传递用户输入数据+百分号作为参数来调用此方法:
userRepository.userSuggest(userInpoutData + "%");
现在的问题:
当用户传递 "%" (userInpoutData="%") 方法时 return 数据库中所有现有用户。我怎样才能防止这种 SQL 注入?
我知道使用 entityManager.createNamedQuery(比如 How To Fix SQL Injection: JPA)可以解决这个问题,但我不知道如何将它与 Spring JpaRepository 一起使用。
谢谢。
这不是 SQL 注入。是因为:
userRepository.userSuggest(userInpoutData + "%");
所以你得到:
%%
试试这个:
if (!userInpoutData.isEmpty() && !userInpoutData.equals("%") {
userRepository.userSuggest(userInpoutData + "%");
}
我想在我的应用程序中添加自动完成搜索功能。对于此功能,我使用了 NamedQuery("userSuggest")。在 JpaRepository 中,我定义了一个带有一个参数的方法("userSuggest")。 这是我的代码:
@Entity
@NamedQueries({
@NamedQuery(name = "User.userSuggest", query = "select u from User u where u.userName like :userName") })
public class User implements java.io.Serializable {
private Integer userId;
private String userName;
setter and getter ...
}
和
@Repository("userRepository")
public interface UserRepository extends JpaRepository<User, Integer> {
List<Gene> userSuggest(@Param("userName") String userName);
}
我通过传递用户输入数据+百分号作为参数来调用此方法:
userRepository.userSuggest(userInpoutData + "%");
现在的问题: 当用户传递 "%" (userInpoutData="%") 方法时 return 数据库中所有现有用户。我怎样才能防止这种 SQL 注入? 我知道使用 entityManager.createNamedQuery(比如 How To Fix SQL Injection: JPA)可以解决这个问题,但我不知道如何将它与 Spring JpaRepository 一起使用。 谢谢。
这不是 SQL 注入。是因为:
userRepository.userSuggest(userInpoutData + "%");
所以你得到:
%%
试试这个:
if (!userInpoutData.isEmpty() && !userInpoutData.equals("%") {
userRepository.userSuggest(userInpoutData + "%");
}