SQL Инъекция + Пробная выписка Java 8 - PullRequest
0 голосов
/ 11 марта 2020

Привет всем,

Я получаю SQL Внедрение уязвимости от VERACODE в моем коде ниже.

         public <T> List<T> switchToSamlConnectionAndGetDataFromDb(String sql, RowMapper<T> rowMapper,
                    Object[] args) throws SQLException 
        {
                List<T> rowList = null;
                try (
                    Connection connection = getConnection();
                    PreparedStatement prepareStatement = connection.prepareStatement(sql)
                    ) {
                    if (null != args && args.length > 0) {
                        setStatement(args, prepareStatement);
                    }
                    try(ResultSet rs = prepareStatement.executeQuery()){
                        RowMapperResultSetExtractor<T> rowMapperResultSetExtractor = new RowMapperResultSetExtractor<>(
                                rowMapper);
                        rowList = rowMapperResultSetExtractor.extractData(rs);
                    }
                } catch (InvalidUserException iue) {
                    sendEmailNotification(iue)
                    throw iue;
                } finally {
                    getDataSource().getPool().purgeOnReturn();
                }
                return rowList;
            }

            private void setStatement(Object[] args, PreparedStatement prepareStatement) throws SQLException {
                int count = 1;
                for (int parameterIndex = 0; parameterIndex < args.length; parameterIndex++) {
                    if (args[parameterIndex] instanceof List) {
                        List<?> list = (List) args[parameterIndex];
                        for (int listParamIndex = 0; listParamIndex < list.size(); listParamIndex++) {
                            prepareStatement.setObject(count, list.get(listParamIndex));
                            count++;
                        }
                    } else {
                        prepareStatement.setObject(count, args[parameterIndex]);
                        count++;
                    }
                }
            }

Я провел анализ и просмотрел несколько блогов. В соответствии с рекомендацией я использовал подготовленное утверждение и избегал динамического генерирования c SQL. Но я получаю SQL Ошибка внедрения при попытке строки (ResultSet rs = prepareStatement.executeQuery ()). Может кто-нибудь, пожалуйста, помогите.

Рекомендации: Избегайте динамического построения SQL запросов. Вместо этого используйте параметризованные подготовленные операторы, чтобы предотвратить интерпретацию базой данных содержимого переменных связывания как части запроса. Всегда проверяйте ненадежный ввод, чтобы убедиться, что он соответствует ожидаемому формату, используя централизованные процедуры проверки данных, когда это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...