Checkmarx показывает, что в коде есть риски для внедрения второго порядка - PullRequest
0 голосов
/ 29 января 2019

Галочка отсканировала наши коды и показала, что у этого кода есть риски для введения второго порядка кода, подобного этому

@SuppressWarnings("unchecked")
public List<Map<String, Object>> findBySQL(String sql, List<ScalarType> types, List<Object> values, Info info) throws ApplicationException {
    try {
        SQLQuery query = currentSession().createSQLQuery(sql);
        if (types != null) {
            for (ScalarType scalar : types) {
                query.addScalar(scalar.getColumn(), scalar.getType());
            }
        }

        if (values != null) {
            for (int i = 0; i < values.size(); i++) {
                query.setParameter(i, values.get(i));
            }
        }
        query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
        return query.list();
    } catch (Exception e) {
        throw new ApplicationException(e, info);
    }
}

Наш код использует подготовленное состояние для выполнения sql.Но почему в этом коде все еще есть риски, и как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Checkmarx выдает ошибку, потому что значения, которые вы устанавливаете для параметров запроса, не проверены для его типа.

Например, давайте предположим, что запрос, сформированный с вашим PreparedStatement, такой же, как показано ниже, изначение, которое вы хотите передать параметру запроса, равно «Test»

Select * from XYZ where COL1 = ?

Если ваш код скомпрометирован и злоумышленник передаст 'Test' OR 1 = 1 в параметре запроса, тогда условие всегда будет истинным, и оно будетвернуть все записи из таблицы.

Итак, перед выполнением запроса вы должны проверить все свои входные данные.

Надеюсь, это поможет

0 голосов
/ 07 февраля 2019

Для решения вашей проблемы в Checkmarx вам нужно проверить эту строку sql

...