Estoy tratando de evitar una inyección de SQL en mi backend de Node.js. Estoy usando el paquete mssql, estaba haciendo algunas pruebas y descubrí que si en un parámetro está el carácter ', la consulta no funciona (obviamente).
sql.connect(sqlConfig, function (err) { str_query = 'SELECT * FROM table WHERE notes= '+req.query.notes+''; if (err) console.log(err); var request = new sql.Request(); // query to the database and get the records request.query(str_query, function (err, recordset) { //here do things }¿Cómo puedo prevenir esto?
Esto no se ha probado, pero así es como lo haría.
Aquí hay un poco de información sobre lo que está pasando de Google.
Las consultas parametrizadas obligan al desarrollador a definir primero todo el código SQL y luego pasar cada parámetro a la consulta posterior. Este estilo de codificación permite que la base de datos distinga entre código y datos, independientemente de la entrada del usuario.
sql.connect(sqlConfig, function (err) { str_query = 'SELECT * FROM table WHERE notes=?'; if (err) console.log(err); var request = new sql.Request(); // query to the database and get the records request.query(str_query, [req.query.notes] , function (err, recordset) { //here do things }