Pregunta

Yo estoy buscando para inspeccionar las instrucciones SQL en Java/jdbc código para asegurarse de que el SQL a ejecutar es de calidad aceptable.Ni el PMD no Findbugs parece haber JDBC o reglas de sql.Yo podría usar p6spy para iniciar el SQL y mirar de esa manera, pero esto es de manual.

Me pregunto si la estrategia de uso de los PMD/Findbugs/etc para crear una regla que cualquier cadena que se pasa para PreparedStatement donde hay un "=" o "en" sólo ha parametrizado a los vars en el comparar lado.

Alguien ha hecho esto?O hacer esto por otros medios?

¿Fue útil?

Solución

Este es un problema difícil.Los operadores de comparación como = y IN() en algunos casos, pero también hay: != <> < <= > >= LIKE.

¿Cómo detectar los casos de interpolación de las variables de la aplicación como literales de expresiones?

String sql = "SELECT *, " + someJavaVar + " AS constant_column FROM mytable";

Usted podría buscar SQL que contiene delimitadores de cadena, pero la inyección de SQL no viene sólo a partir de la interpolación de los literales de cadena.

¿Cómo detectar los casos de interpolación de las variables de la aplicación como otras cosas que los valores de los datos?

String sql = "SELECT * FROM mytable ORDER BY " + columnname;

No sé cualquier forma automática para detectar SQL inyección de fallas.La revisión de código es una forma más efectiva de detectar.En cada instrucción SQL que contiene interpolados las variables de la aplicación, usted tiene que confirmar que la aplicación de las variables que son "seguros" y que su aplicación tiene explícitamente validado ellos o transformado para que no contienen peligrosa carga.

Otros consejos

¿Tiene la capacidad de probar completamente la aplicación con un depurador conectado a ella?

Establezca un punto de interrupción en la implementación de su controlador JDBC de Connection.createStatement (), y ejecute la aplicación ... (o si usa un controlador para el que no tiene código fuente, escriba un controlador falso que simplemente delegue llamadas a el real, y registrar todas las instancias de createStatement ())

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top