2015-11-18 4 views
3

Я хочу защитить свое приложение от атак SQL Injection.Prevent Sql Injection (Java)

Первый вопрос: Что это лучший способ сделать это?

Первый способ: преобразовать каждый запрос JSon здесь:

public JsonObject requestToJson(HttpServletRequest request) throws UnsupportedEncodingException{ 

     request.setCharacterEncoding("UTF-8"); 

     StringBuffer jb = new StringBuffer(); 
     String line = null; 
     try { 
      BufferedReader reader = request.getReader(); 
      while ((line = reader.readLine()) != null) 
       jb.append(line); 
     } catch (Exception e) { /*report an error*/ } 

     return new JsonParser().parse(jb.toString()).getAsJsonObject(); 
    } 

Если это лучший способ, чтобы предотвратить его здесь, то второй вопрос:, как сделать это здесь?

Второй способ: Это можно сделать с помощью уровня Hibernate. Второй вопрос: как это сделать?

+0

Каким образом преобразование запроса в JSON предотвратит внедрение SQL? Как вы думаете, почему HIbernate уязвим для SQL Injection? –

+0

нет, преобразование в json не препятствует инъекции, конечно. Я имею в виду, когда я конвертирую каждый запрос в json, я могу поместить эту проверку в эту функцию. – annoirq

+0

Я новичок в спящем режиме. Я использую несколько способов генерации SQL: JPARepository, CriteriaBuilder и HQL. Мой вопрос: «это уже предотвращает SQL Injection»? – annoirq

ответ

3

Спасибо этому пользователю: Elliott Frisch. Он ответил в комментарии.

JPARepository, как это уже предотвращено SQL Injection:

public interface UserRepository extends JpaRepository<User, Integer> { 
    User findByPhoneNumber(String phoneNumber); 
} 

Просто нужно предотвратить, если вы используете HQL:

String query1 = "select * from MyBean where id = "+ id; 
String query2 = "select * from MyBean where id = :id"; 

второй, будет обеспечен.

Спасибо, всем.