У меня есть несколько API, которые выполняют операции с базой данных. Всякий раз, когда я загружаю свой код в checkmarx, я получаю следующую ошибку, и она помечается как ошибка с высокой уязвимостью. Кто-нибудь может мне помочь?
Ошибка
Метод CreateDatabaseAndMapToDomain приложения выполняет SQL-запрос с executeQuery в строке 717 daas-springboot-CheckMarxIntegration\src\main\java\com\it\daas\apis\service\PostgresConnectionServiceImpl.java. Приложение создает этот SQL-запрос, встраивая в запрос ненадежную строку без надлежащей очистки. Объединенная строка отправляется в базу данных, где она анализируется и выполняется соответствующим образом.
Злоумышленник может записать произвольные данные в базу данных, которые затем извлекаются приложением с помощью метода executeQuery в getDomains в строке 678 daas-springboot-CheckMarxIntegration\src\main\java\com\it\daas\apis\service \PostgresConnectionServiceImpl.java. Затем эти данные проходят через код, пока они не будут использованы непосредственно в SQL-запросе без очистки, а затем отправлены на сервер базы данных для выполнения.
Вот мои функции
@Override
public String getDomains() throws SQLException {
String domainquery = "SELECT id,domain FROM domain";
Connection con = null;
PreparedStatement st = null;
ResultSet result = null;
try
{
con = ConnectToPostgresapibuilderDatabase(apibuilderConnectionString, apibuilderUserName,apibuilderPassword);
con.setSchema(this.schema);
st = con.prepareStatement(domainquery);
result = st.executeQuery();
ArrayList<DatabaseDomainBean> list = new ArrayList<DatabaseDomainBean>();
while (result.next()) {
list.add(new DatabaseDomainBean(result.getString("domain"), result.getString("id")));
}
return new JSONObject().put("domainlist", list).toString();
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
finally{
result.close();
st.close();
con.close();
}
}
@Override
public String CreateDatabaseAndMapToDomain(String database, String[] domainIds, String password)
throws SQLException {
if (!this.apibuilderPassword.equals(password)) {
return null;
}
else if(database==null || domainIds==null || password ==null)
{
return "Failure";
}
Connection con =null;
PreparedStatement st =null;
ResultSet ispresent =null;
PreparedStatement mapquerystmnt =null;
ResultSet resultMapping = null;
try
{
con = ConnectToPostgresapibuilderDatabase(apibuilderConnectionString, apibuilderUserName,apibuilderPassword);
con.setSchema(this.schema);
for (int i = 0; i < domainIds.length; i++) {
con.setSchema(this.schema);
String IfExists = MessageFormat.format(
"SELECT databasename,domainid FROM Databases WHERE databasename IN (?) AND domainid IN (?)",
Utilitymethods.ConvertToMessageFormatCompatibleForm(database),
Utilitymethods.ConvertToMessageFormatCompatibleForm(domainIds[i]));
st = con.prepareStatement(IfExists);
st.setString(1, database);
st.setInt(2, Integer.parseInt(domainIds[i]));
ispresent = st.executeQuery();
if (!ispresent.next()) {
// INSERT INTO Databases (databasename,domainid) VALUES ('Teradata','1')
String mapquery = MessageFormat.format(
"INSERT INTO Databases (databasename,domainid) VALUES (?,?) returning Id",
Utilitymethods.ConvertToMessageFormatCompatibleForm(database),
Utilitymethods.ConvertToMessageFormatCompatibleForm(domainIds[i]));
mapquerystmnt = con.prepareStatement(mapquery);
mapquerystmnt.setString(1, database);
mapquerystmnt.setInt(2, Integer.parseInt(domainIds[i]));
resultMapping = mapquerystmnt.executeQuery();
}
}
return "Success";
}
catch(Exception e)
{
e.printStackTrace();
return "Failure";
}
finally
{
ispresent.close();
st.close();
resultMapping.close();
mapquerystmnt.close();
con.close();
}
}
@Override
public String getDomains() throws SQLException {
String domainquery = "SELECT id,domain FROM domain";
Connection con = null;
PreparedStatement st = null;
ResultSet result = null;
try
{
con = ConnectToPostgresapibuilderDatabase(apibuilderConnectionString, apibuilderUserName,apibuilderPassword);
con.setSchema(this.schema);
st = con.prepareStatement(domainquery);
result = st.executeQuery();
ArrayList<DatabaseDomainBean> list = new ArrayList<DatabaseDomainBean>();
while (result.next()) {
list.add(new DatabaseDomainBean(result.getString("domain"), result.getString("id")));
}
return new JSONObject().put("domainlist", list).toString();
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
finally{
result.close();
st.close();
con.close();
}
}