await query(`INSERT INTO feedback.app_v2 SET ?`, feedback)Escribí esta línea para codificar en mi proyecto JS para insertar datos en la tabla correspondiente.
Quiero preguntar si esta sintaxis de MySql está a salvo de Sql Injection. Aquí, la retroalimentación es un objeto cuyas claves coinciden con las columnas de la tabla app_v2.
Esa no es una sintaxis MySQL válida.
Esta es una sintaxis válida de MySQL:
INSERT INTO feedback.app_v2 SET mycolumn = ?Sí, está a salvo de la inyección SQL, porque el valor dinámico está restringido a un parámetro de consulta. Esto no se combina con la consulta hasta después de que se haya analizado la consulta, por lo que no hay forma de que el parámetro pueda introducir una sintaxis no deseada.
Si el paquete NPM puede realizar la sustitución de cadenas para colocar la sintaxis key = 'value' en la cadena de consulta, ese no es un parámetro de consulta verdadero. La asignación debe ser parte de la consulta antes de analizarla, pero los parámetros de consulta adecuados no se combinan con la consulta hasta después de analizarla.
Por lo tanto, depende del código en el paquete NPM para realizar la sustitución de cadenas sin ningún error que resulte en una vulnerabilidad de inyección SQL.