sql >> Base de Datos >  >> RDS >> Mysql

¿Cuáles son las mejores prácticas para prevenir la inyección de SQL en node-mysql?

Recuerde que las inyecciones de SQL son causadas por cadenas hostiles que se interpretan como comandos, no como comandos de bloqueo. ¿Está seguro de que está recuperando la cadena original, no una versión modificada?

Por ejemplo, hay una gran diferencia entre estos dos:"test" y "'test'" .

Por lo general, solo se escapan los caracteres dañinos, el resto se deja como está.

Es mejor evitar el uso del controlador de bajo nivel. Pruebe y use una biblioteca como Sequelize para proporcionar algo de abstracción y más apoyo. Ese módulo admite declaraciones de marcador de posición que generalmente hacen que escapar no sea un problema, se maneja automáticamente.

Consulte la sección sobre consultas sin procesar con reemplazos donde tienes la capacidad de hacer esto:

sequelize.query('SELECT * FROM projects WHERE status = ?',
  { replacements: ['active'], type: sequelize.QueryTypes.SELECT }
).then(function(projects) {
  console.log(projects)
})

No hay riesgo de que se filtren los datos del usuario porque los proporcionó como un valor explícito que se manejó correctamente, no como una cadena en línea en la consulta.