Предотвращение инъекций 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 });