Recientemente comencé a usar LAPSE + para el análisis de código estático y seguí apuntando a java.sql.ResultSet.getString
como una fuga de información. El ResultSet
está correctamente cerrado después de su uso.
LAPSE + hace esto solo para ResultSet.getString()
y ResultSet.getObject()
. Por ejemplo, ResultSet.getDate()
no se toma como una vulnerabilidad. Este comportamiento confirma a esta página OWASP , que indica solo a esos dos captadores en ResultSet
como vulnerables.
Estoy tratando de averiguar la razón detrás de esto. ¿Tiene algo que ver con que las cuerdas sean inmutables?
Aunque no es lo exacto (debido a razones de confidencialidad), a continuación se muestra un bloque de código de muestra que me preocupa:
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);
}
}
}