java - 命名参数查询如何阻止 SQL 注入(inject)

标签 java hibernate

我在 How to prevent SQL Injection in hibernate? 看到了 HQL SQL 注入(inject)主题.但我不明白 Query.setParameter("<parameter name>",<parameter value>) 是怎么做到的

消除SQL注入(inject), 如果恶意用户通过 true = true到以下 HQL,String hqlString = "from Item item where name= '"+nameValue+"'";

然后他可以将它传递给query.setString("name"+ nameValue)还! setString() 及其所有姊妹方法是否有任何过滤器来检查 SQL 注入(inject)?

最佳答案

JDBC 或 Hibernate 驱动程序将在执行查询之前适本地转义此数据;确保数据仅作为数据使用。

在执行查询之前,驱动程序会转义如下字符:

  1. ;(查询分隔符。)
  2. '(字符数据字符串分隔符。)
  3. --(注释分隔符。)

关于java - 命名参数查询如何阻止 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30727579/

相关文章:

java - Tomcat下解析XML文档时weblogic的DOMFactoryProperties出现NullPointerException

java - JPQL查询- hibernate : with-clause not allowed on fetched associations

java - 如何检查主机是否无法访问?

java - ORA-02292 : integrity constraint (xxx) violated - child record found

spring - 基于 Maven 的项目使用 Spring Hibernate、EJB3.0、JPA JBOSS?

Java:从线程中一个接一个地调用方法

java - 如何在 Java 中为日期添加天数

java.lang.NoClassDefFoundError : Could not initialize class xxx. xxx.xxx.HibernateUtil

java - 如何在 JPQL 或 HQL 中进行限制查询?

java - 为什么 Hibernate 延迟加载在 Kotlin 中表现不同?