Recentemente ho iniziato a utilizzare LAPSE + per l'analisi del codice statico e continuava a puntare java.sql.ResultSet.getString
come perdita di informazioni. Il ResultSet
viene chiuso correttamente dopo il suo utilizzo.
LAPSE + lo fa solo per ResultSet.getString()
e ResultSet.getObject()
. Ad esempio, ResultSet.getDate()
non viene considerato come vulnerabilità. Questo comportamento conferma questa pagina OWASP , che indica come vulnerabili solo i due getter in ResultSet
.
Sto cercando di capire il motivo alla base di questo. Ha qualcosa a che fare con le stringhe che sono immutabili?
Sebbene non sia la cosa esatta (a causa di motivi di riservatezza), di seguito è riportato un esempio di blocco di codice che mi preoccupa:
ResultSet rs = null;
try {
dbConnection = dataSource.getConnection();
prepStmt = dbConnection.prepareStatement("SELECT NAME, DOB FROM CUSTOMERS WHERE ID=?");
prepStmt.setInt(1, customerId);
rs = prepStmt.executeQuery();
//do something
while (rs.next()) {
String name = rs.getString(1);
Date dob = rs.getDate(2);
//do something
}
} catch (SQLException e) {
//do something
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
log.error("Database error. Could not close result set - " + e.getMessage(), e);
}
}
}