2016-02-23 2 views
0

Я исправил Sql-инъекцию в секции IF и потому, что число параметров различно в разделах IF и ELSE, я разбиваю IF..ELSE на две функции, но, к сожалению, Мои запросы не работа у кого-нибудь есть предложение?SQL Injection исправлен, но запрос не работает -Spring MVC

if (prevContactSeq==null) 
    { 

     contactQuery.append("Insert into contacttable("); 
     contactQuery.append("ContactSeq,ID,LastName,FirstName,ContactLabel,Phone1,Phone2)"); 
     contactQuery.append("Values("+ contactSeq+ "," + Id + ",'" + lastName + "','"+ firstName + "','WEB',"+ Long.parseLong(contactresult) + ","+ Long.parseLong(alternatecontactresult) + ")"); 
     //+ updateFields + " where id = " + tId; 
     logClient.debug("Insert Query " + contactQuery.toString()); 
     System.out.println("RContact Insertion Query "+contactQuery.toString()); 
    } 
    else 
    { 


     contactQuery.append("Update contacttable "); 
     contactQuery.append(" Set phone1=" + Long.parseLong(contactresult) + ","); 
     contactQuery.append(" phone2 =" + Long.parseLong(alternatecontactresult)); 
     contactQuery.append(" Where contactSeq="+ prevContactSeq); 
     contactQuery.append(" And id=" + Id); 

     System.out.println("Contact Update Query "+contactQuery.toString()); 
    } 

    try{   
     JdbcTemplate jdbcTemplate = this.getJdbcTemplate();   
     return jdbcTemplate.update(contactQuery.toString()); 
    }catch(DataAccessException dae){ 
     dae.printStackTrace(); 
     //error in making the database update. return 0 to identify that the  database update failed 
     return 0; 
    } 
} 

Я делаю это исправление, но запросы не работает:

if (prevContactSeq == null) { 



     update= insertContact(firstName,Id, contactresult, 
       alternatecontactresult, contactSeq,lastName); 
    } 
    else 
    { 


     update= updateContact(Id, contactresult, 
       alternatecontactresult, prevContactSeq); 
    } 
    return update; 



} 

private int updateContact(int Id, 
     String contactresult, String alternatecontactresult, 
     Integer prevContactSeq) { 

    StringBuffer contactQuery =new StringBuffer(); 
    contactQuery.append("Update contacttable "); 
    contactQuery.append(" Set phone1=Long.parseLong(?),"); 
    contactQuery.append(" phone2 =Long.parseLong(?)"); 
    contactQuery.append(" Where contactSeq=?"); 
    contactQuery.append(" And id=?"); 

    System.out.println("Contact Update Query "+contactQuery.toString()); 
    try{   
     JdbcTemplate jdbcTemplate = this.getJdbcTemplate();   
     return jdbcTemplate.update(contactQuery.toString(), new Object[] {contactresult,alternatecontactresult,prevContactSeq,Id}); 
    }catch(DataAccessException dae){ 
     dae.printStackTrace(); 
     //error in making the database update. return 0 to identify that the database update failed 
     return 0; 
} 
} 

private int insertContact(String firstName, int Id, 
     String contactresult, String alternatecontactresult, 
     Integer contactSeq,String lastName) { 
    StringBuffer contactQuery =new StringBuffer(); 
    contactQuery.append("Insert into contacttable("); 
    contactQuery.append("ContactSeq,ID,LastName,FirstName,ContactLabel,Phone1,Phone2)"); 
    contactQuery.append("Values(?,?,?,?,?,Long.parseLong(?),Long.parseLong(?)"); 
    logClient.debug("Insert Query " + contactQuery.toString()); 
    System.out.println("Contact Insertion Query "+contactQuery.toString()); 
    try{   
     JdbcTemplate jdbcTemplate = this.getJdbcTemplate();   
     return jdbcTemplate.update(contactQuery.toString(), new Object[] {contactSeq,Id,lastName,firstName,"WEB",contactresult,alternatecontactresult}); 
    }catch(DataAccessException dae){ 
     dae.printStackTrace(); 
     //error in making the database update. return 0 to identify that the database update failed 
     return 0; 
} 
} 
+0

SQL не имеет функции Long.parseLong(). Если contactResult (и другие аргументы) должны быть длинными значениями, а не строками, то они должны иметь тип long. Используйте соответствующий тип с самого начала, т. Е. Перед вызовом этих методов. –

+0

Благодарим за отзыв. Я делаю правильную работу по исправлению Sql-инъекции, используя подготовленный оператор? Пожалуйста, порекомендуйте. спасибо –

ответ

0

Вы делаете инъекции SQL, но не инъекционные параметров правильно.

Ваш код должен быть изменен, как показано ниже, ParseLong следует использовать там, где мы имеем значение

StringBuffer contactQuery =new StringBuffer(); 
    contactQuery.append("Update contacttable "); 
    contactQuery.append(" Set phone1=?,"); 
    contactQuery.append(" phone2 =?"); 
    contactQuery.append(" Where contactSeq=?"); 
    contactQuery.append(" And id=?"); 

и параметры прохождения динамически должны иметь метод синтаксического анализа, как показано ниже

return jdbcTemplate.update(contactQuery.toString(), new Object[] {Long.parseLong(contactresult),Long.parseLong(alternatecontactresult),prevContactSeq,Id}); 

еще часть Поменять

private int updateContact(int Id, 
     String contactresult, String alternatecontactresult, 
     Integer prevContactSeq) { 

    StringBuffer contactQuery =new StringBuffer(); 
    contactQuery.append("Update contacttable "); 
    contactQuery.append(" Set phone1=?,"); 
    contactQuery.append(" phone2 =?"); 
    contactQuery.append(" Where contactSeq=?"); 
    contactQuery.append(" And id=?"); 

    System.out.println("Contact Update Query "+contactQuery.toString()); 
    try{   
     JdbcTemplate jdbcTemplate = this.getJdbcTemplate();   
     return jdbcTemplate.update(contactQuery.toString(), new Object[] {Long.parseLong(contactresult),Long.parseLong(alternatecontactresult),prevContactSeq,Id}); 
    }catch(DataAccessException dae){ 
     dae.printStackTrace(); 
     //error in making the database update. return 0 to identify that the database update failed 
     return 0; 
} 
} 

Если вы не уверены в значении, может быть null, вы можете добавить нулевую проверку перед выполнением Long.parseLong

+0

не могли бы вы дать мне свою идею в разделе Else. У меня проблема с этой частью. Спасибо –

+0

Добавлена ​​дополнительная смена детали ... дайте мне знать по любым вопросам .. –

Смежные вопросы