Acabo de instalar el complemento FindBugs para Eclipse, con la esperanza de que me ayude a encontrar vulnerabilidades de inyección SQL en mi código. Sin embargo, no parece estar encontrando nada, ni siquiera cuando me puse deliberadamente algunos enFindbugs no encuentra potencial vulnerabilidad de inyección SQL
En los siguientes ejemplos se supone staticFinalBaseQuery
se declara como sigue:.
pública final de cuerda estática staticFinalBaseQuery = "SELECT foo DE tabla donde id = '";
y asume userInputfilterString
es un argumento para el método que envuelve los fragmentos de ejemplo. Viene directamente de la entrada del usuario y no se desinfecta.
Por ejemplo, el siguiente fragmento no se disparará una advertencia:
String query = staticFinalBaseQuery + userInputfilterString;
pstmt = dbConnection.prepareStatement(query);
Dónde staticFinalBaseQuery
es una cadena static final, y userInputfilterString
es una cadena directa de la entrada del usuario, disponible sólo en tiempo de ejecución, no se ha borrado del todo . Claramente, esta es una vulnerabilidad.
Espero que se active la advertencia "A prepared statement is generated from a nonconstant String".
El siguiente fragmento también no causa una advertencia (no es sorprendente, ya que las formas compiladas de estos son probablemente idénticos):
pstmt = dbConnection.prepareStatement(staticFinalBaseQuery + userInputfilterString);
Sin embargo, esto causará una advertencia:
pstmt = dbConnection.prepareStatement(staticFinalBaseQuery + userInputfilterString + "'");
Si agrego una cadena vacía o un espacio, no se activa ninguna advertencia.
Entonces, mi pregunta es, ¿cómo puedo obtener FindBugs para disparar en mi primer ejemplo? También tengo curiosidad por ¿por qué el primero no causa una advertencia, pero el último sí?
¡Gracias de antemano!
EDIT: I submitted a bug al sistema de seguimiento de errores FindBugs, ya que parece que esto podría ser un error. Sin embargo, si alguien tiene algún consejo, me encantaría escucharlos.
Tal vez deberías reportar esto como un error para la gente de FindBugs? –
Sí, quizás debería. Pensé que tal vez solo lo estaba usando mal. Si ese es el caso, es posible que deseen actualizar la documentación. – pkaeding
¿Puedes publicar cómo se inicializan staticFinalBaseQuery y userInputfilterString exactamente? –