在 Spring Hibernate 中获取二阶 SQL 注入

Getting Second Order SQL Injection in Spring Hibernate

提问人:Jitendra Tiwari 提问时间:1/30/2023 最后编辑:baruchiroJitendra Tiwari 更新时间:1/30/2023 访问量:274

问:

在扫描 Checkmarx 工具后,我在 Spring-Hibernate 应用程序中面临二阶 SQL 注入,我在 StackOverflow 和其他平台中也经历了多个问题,但没有得到正确的发现。

你能看看下面的代码片段吗,

public String getOrderId(order_name){
    String returnId= null;
    Query query = entityManager.createNativeQuery("select order_id from order where order_name=?");
    List<String> dataset = query.setParameter(1,order_name).getResultList();
    if(dataset!=null){
       returnId = dataset. Get(0);
    }
 return returnId;
}

在上面的方法中,在调用时,得到一个高漏洞问题,该方法返回的数据流通过代码而没有经过适当的审查或验证,并最终用于该方法中的进一步数据库查询。getResultList()

早期的代码是这样的,

public String getOrderId(order_name){
   String returnId= null;
   String q = "select order_id from order where    order_name="+order_name;
   Query query = entityManager.createNativeQuery(q);

并直接将其用作查询中的字符串附加,我已使用set参数对其进行了修改,

Query query = entityManager.createNativeQuery("select order_id from order where order_name=?");
List<String> dataset = query.setParameter(1,order_name).getResultList();

但是在从中获取数据后,它仍然要求在进一步的数据库查询方法中使用之前对数据进行清理和验证。query.getResultSet()

并且此返回数据正在进一步查询中使用,例如 .(在where子句中正确使用设置参数以避免SQL注入)。select * from return_Data where clause

在上面的查询中,用于另一种方法,我们将 return_Data 作为输入传递给它。

您能否在这里提供帮助,以了解可以添加哪些检查和验证来克服此类问题。提前感谢您的及时回复。

Spring Hibernate Security SQL注入 CheckMARX

评论

0赞 baruchiro 1/30/2023
请用代码元素等格式化您的问题
0赞 baruchiro 1/30/2023
请添加您从系统获得的Checkmarx注释
0赞 Your Common Sense 1/30/2023
“二阶SQL注入”绝对没有什么特别之处,它都是SQL注入。你只是以与其他人完全相同的方式防止它
0赞 Jitendra Tiwari 1/30/2023
除此之外还有什么可以防止的:- Query query = entityManager.createNativeQuery(“select order_id from order where order_name=?”);列表<字符串> dataSet = query.setParameter(1,order_name).getResultList();在防止 Checkmarx 仍然显示相同的理智并验证从 getResultList() 方法返回的数据之后。
0赞 Your Common Sense 1/30/2023
从 getResultList() 方法返回的任何内容都与 SQL 无关,更不用说注入了。N'est-ce pas?

答: 暂无答案