Анализатор обнаружил, что для конфигурации системы или базы данных используются данные из внешнего источника. Это может привести к возникновению дефекта безопасности.
Уязвимости такого типа относятся к категории рисков OWASP Top 10 Application Security Risks 2021:
Приведем пример:
public static class DataBaseController { private String user; private String password; private void connectFromRequest(HttpServletRequest request) { String dbName = request.getParameter("db"); String dbUrl = "jdbc:mysql://localhost:3306/" + dbName + "?useUnicode=true&characterEncoding=utf8"; Connection db = DriverManager.getConnection(dbUrl, user, password); } }
В этом примере формируется строка подключения к БД. В переменную dbUrl
записываются данные, не прошедшие никакой валидации, благодаря чему злоумышленник может передать любое название базы данных. Подобным образом он может получить информацию, доступ к которой не был предусмотрен.
Для защиты от подобных атак стоить производить валидацию входных данных.
Пример корректного формирования строки подключения:
public static class SafeDataBaseController { private final List<String> WHITE_LIST = new ArrayList<>(); private String user; private String password; private void safeConnectFromRequest(HttpServletRequest request) { String db = request.getParameter("db"); if (!WHITE_LIST.contains(db)) { return; } String dbUrl = "jdbc:mysql://localhost:3306/" + db + "?useUnicode=true&characterEncoding=utf8"; Connection db = DriverManager.getConnection(dbUrl, user, password); } }
В данном случае проверяется, что база данных db
содержится в списке WHITE_LIST
. Таким образом, пользователь будет иметь доступ лишь к определённому перечню баз данных, что не позволит получить приватную информацию.
Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.). |
Данная диагностика классифицируется как: