2013-08-16 3 views
1

Это мой метод. Как вы можете видеть, я использую собственный sql для выполнения запросов INSERT.Как сделать INSERT более безопасным?

public void addNews(String title, String content) { 

     Session session = null; 

     session = this.sessionFactory.getCurrentSession(); 
     Query query = session 
       .createSQLQuery(
         "INSERT INTO news VALUES(NULL,:title,:content,NULL)") 
       .setString("title", title).setString("content", content); 
     int updated = query.executeUpdate(); 

    } 

Безопасно? Или как я могу улучшить свой метод?

ответ

1

Да, задание значений в качестве параметров (метод setString()), предотвращающий SQL-инъекции. Незащищенная SQL-оператор выглядит следующим образом:

String query = "INSERT INTO news VALUES(NULL," + title + "," + content + ",NULL)"; 

Подробнее о инъекциях SQL (и других типах уязвимостей) вы можете здесь: https://www.owasp.org/index.php/SQL_Injection

+0

Что делать, если я буду делать '+ идентификатор +' заявление (идентификатор Integer)? – Tony

+0

Тогда, если есть какой-либо способ для пользователя указать id, вы можете «поймать» SQL-инъекцию. Например. Я могу ввести идентификатор ввода: «1 или 1 = 1» и из запроса «Выбрать пользователя, где id =» + id; Я получаю запрос: «Выберите пользователя, где id = 1 или 1 = 1», который возвращает мне всех пользователей – yname

+0

Но '' 1 = 1'' не является Целочисленным, не так ли? – Tony

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