В этом методе возникает проблема с высокой степенью серьезности:
public void recordBadLogin(final String uid, final String reason, final String ip) throws DataAccessException {
if (Utils.isEmpty(uid)) {
throw new DataAccessException("User information needed to update , Empty user information passed");
}
try {
String sql = (String) this.queries.get(IUtilDAO.queryKeyPrefix + UtilDAO.RECORD_FAILED_LOGIN);
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("uid", uid.trim());
paramMap.put("reason", (reason != null ? reason.trim() : "Invalid userid/password"));
paramMap.put("ip", ip);
this.namedJdbcTemplate.update(sql, paramMap);
} catch (Exception e) {
throw new DataAccessException("Failed to record bad login for user " + uid, e);
}
}
Эта строка кода вызывает проблему:
String sql = (String) this.queries.get(IUtilDAO.queryKeyPrefix + UtilDAO.RECORD_FAILED_LOGIN);
запросов - это объект свойств и подготовленный оператор извлекается с учетом IUtilDAO.queryKeyPrefix + UtilDAO.RECORD_FAILED_LOGIN. И эти 2 аргумента являются константами. Логически я не понимаю, как это может вызвать проблему с SQL инъекцией, поскольку подготовленный оператор извлекается из словаря. У кого-нибудь есть идея, является ли это ложным срабатыванием или присутствует фактическая уязвимость?