【问题标题】:Java Hibernate Search Like Query - Injection Protection - Parameter Binding?Java Hibernate Search Like Query - 注入保护 - 参数绑定?
【发布时间】:2021-03-23 21:51:28
【问题描述】:

我有一个休眠搜索,允许通过他们的描述搜索工作。这使用类似查询将描述中找到的任何单词与正在搜索的单词进行匹配。下面的代码是有效的,但是很容易以'或'1'='1的形式被输入到搜索框中。这将输出我当然不想要的整个表。

log.debug("REST request to search Jobs for query {}", query);
Session session = HibernateUtil.getSession();
Query a = session.createQuery("select jobs from Jobs jobs where jobs.description like '%" + query + "%'");
return a.list();

我相信我需要使用参数绑定来纠正这个问题,但是我似乎无法让它工作。以下是我尝试过的一些代码,但我只是收到 500 内部服务器错误。我找不到任何使用 like 查询的示例,所以这会造成一些混乱。我可能忽略了一些明显的东西,因为我以前从未使用过休眠。

Query a = session.createQuery("select jobs from Jobs jobs where jobs.description like '%" + query + "%'");
a.setParameter("description", a);
return a.list();

【问题讨论】:

    标签: java hibernate search code-injection protection


    【解决方案1】:

    这是您在 JPA 中使用命名参数的方式:

    Query a = session.createQuery("select jobs from Jobs jobs where jobs.description like '%:queryParam%'");
    a.setParameter("queryParam", query);
    

    setParameter 将您在查询中以: 作为前缀的参数名称作为第一个参数,并将您要放入其中的值作为第二个参数。

    【讨论】:

      猜你喜欢
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多