Предотвращение инъекций SQL Spring (MVC)?
Мне интересно, как Spring MVC обрабатывает SQL-инъекции (и другие проблемы безопасности: XSS, code [javascript] injection и т. д.). Я говорю в основном об избежании значений, которые добавляются в DBs и тому подобное. Кажется, я не могу найти ответа, потому что каждый раз, когда я ищу результаты инъекции spring sql, которые включают инъекцию зависимостей.
мой поток выглядит следующим образом: из браузера клиента я делаю запрос, состоящий из JSON с некоторыми параметрами запроса (не оператор SQL, это было бы слишком глупо - сформировать SQL-запрос в JS). Когда запрос достигает правильно аннотированного метода в контроллере, запрос сопоставляется через @RequestBody с помощью Jackson с "объектом запроса". Теперь этот объект отправляется в DAO, где с помощью шаблона JDBC я запрашиваю БД (и с помощью RowMapper я сопоставляю результаты).
в ДАО у меня есть что-то вроде:
public int countAll(RequestObject request) {
String sql = "SELECT count(*) FROM employees WHERE name = '" + request.getName() + "'";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
int count = jdbcTemplate.queryForInt(sql);
return count;
}
теперь этот подход безопасен от SQL-инъекции? Безопасны ли не основанные на jdbctemplate запросы что течет через весенний MVC?
Не могли бы мы немного обсудить это?
1 ответов
в любое время, когда вы строите запрос конкатенацией, вы vunerlable для инъекционных атак
передайте свои параметры правильно:
jdbcTemplate.queryForInt(sql, args, argTypes)
например:
JdbcTemplate insert = new JdbcTemplate(dataSource);
insert.update("INSERT INTO PERSON (FIRSTNAME, LASTNAME) VALUES(?,?)",
new Object[] { firstName, lastName });