现有项目中的SQL注入补救措施

时间:2019-03-22 06:07:24

标签: sql hibernate code-injection sample

这是我在这个论坛上的第一个问题, 我们正在支持Spring&Hibernate框架应用程序,最近在安全性过程中扫描了现有代码(超过6年的代码)。 在大约5个这些应用程序中发现了SQL注入漏洞。发生这种情况的地方很多,如下所示

StringBuffer sb = new StringBuffer();
FormBean searchcriteria= new FormBean();

sb.append(" SELECT * FROM VW_VIEW1 WHERE COLUMN1 IN (")
.append(" SELECT ID FROM VW_VIEW2 WHERE (")
.append(" COLUMN1 =:NAME OR COLUMN2 IN (SELECT COLUMN2 FROM TABLE WHERE COLUMN3 = :NAME ) AND COLUMN2 IS NOT NULL)))");

if (searchcriteria !=null)
{
 **fillCriteria (criteria,sb);**
}

sb.append(" order by ").append(csort).append(" ").append(csorty);
Query query=session.createSQLQuery(sb.toString()).setParameter("NAME" "MYNAME");
return query.list();

这里的问题fillCriteria具有许多基于用户选择的where子句列,该方法的示例代码如下所示

 private void fillCriteria(FORMBEAN criteria,StringBuffer sb)

{
Helper.addCriterionClause(sb, " and lower(Table_ID) like ",criteria.ID);
Helper.addCriterionClause(sb, " and lower(Table_ID1) like ",criteria.ID1);
Helper.addCriterionClause(sb, " and lower(Table_ID2) like ",criteria.ID2);
Helper.addCriterionClause(sb, " and lower(Table_ID3) like ",criteria.ID3);
Helper.addCriterionClause(sb, " and lower(Table_ID4) like ",criteria.ID4);
Helper.addCriterionClause(sb, " and lower(Table_ID5) like ",criteria.ID5);
Helper.addCriterionClause(sb, " and lower(Table_ID6) like ",criteria.ID6);
Helper.addCriterionClause(sb, " and lower(Table_ID7) like ",criteria.ID7);
}
像这些20-30个子句一样。这是类中的一种方法,每个类中都有数十个方法,每个应用程序中都有数十个类。我现在不想重新定义所有这些方法,因为我没有时间和资源。

您能否建议处理这些类型的问题,以便在一处纠正SQL注入,而不要更改所有代码。用最小的代码更改我该如何处理

非常感谢您的答复

0 个答案:

没有答案