Estoy usando Node.js para crear un bot de Discord. Parte de mi código se ve así:
var info = { userid: message.author.id } connection.query("SELECT * FROM table WHERE userid = '" + message.author.id + "'", info, function(error) { if (error) throw error; }); La gente ha dicho que la forma en que introduzco el message.author.id no es una forma segura. ¿Cómo puedo hacer esto? ¿Un ejemplo?
La mejor manera de hacerlo es usar declaraciones o consultas preparadas (enlace a la documentación del módulo NPM mysql : https://github.com/mysqljs/mysql#preparing-queries )
var sql = "SELECT * FROM table WHERE userid = ?"; var inserts = [message.author.id]; sql = mysql.format(sql, inserts);Si las declaraciones preparadas no son una opción (no tengo idea de por qué no lo serían), la manera de un hombre pobre de evitar la inyección de SQL es escapar de todas las entradas proporcionadas por el usuario como se describe aquí: https://www.owasp.org/ index.php/SQL_Injection_Prevention_Cheat_Sheet#MySQL_Escape
Aquí está la documentación sobre cómo escapar correctamente de cualquier dato proporcionado por el usuario para evitar inyecciones de SQL: https://github.com/mysqljs/mysql#escaping-query-values . mysql.escape(userdata) debería ser suficiente.