【问题标题】:How namedparameter query blocks SQL injection命名参数查询如何阻止 SQL 注入
【发布时间】:2015-08-24 00:11:01
【问题描述】:

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

消除 SQL 注入, 如果恶意用户将true = true传递给关注HQL,String hqlString = "from Item item where name= '"+nameValue+"'";

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

【问题讨论】:

  • Query 在休眠中与传统 jdbc 中的 PreparedStatement 完全相同。它实际上是 Builds 你的查询和执行

标签: java hibernate


【解决方案1】:

JDBC 或 Hibernate 驱动程序会在执行查询之前适当地转义这些数据;确保数据被用作数据。

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

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

【讨论】:

  • 我希望进行实际攻击,例如恶意用户将' OR '1'='1 传递给nameValue
  • 这种情况下驱动会转义'字符,值会像这样OR 1=1,这里有sql注入
  • 好的,我想我们应该检查一下如果放置了逻辑运算符、SQL 运算符如 LIKE 会发生什么。
  • 如果是逻辑运算符,你应该传递另一个字符进行sql注入,驱动程序会将这些字符转义,因此逻辑运算符将视为数据而不是运算符。
猜你喜欢
  • 1970-01-01
  • 2020-05-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
相关资源
最近更新 更多