如何净化sql.js输入?



我使用sql.js来管理我为电子应用程序创建的SQLite文件。我的问题是,我想确保所有的输入都被消毒。到目前为止,我使用的语句如下:

const SQL = await sqljs();
const db = new SQL.Database();
// These values are just examples and will be user inputs through electron.
let id = 1;
let name = 'row name';
db.run(`INSERT INTO tableName VALUES (${}, 'hello');`);

我很确定这种方式是不安全的,可以导致SQL注入。我能做些什么来防止这样的问题?谢谢。

可以使用绑定参数。这些值传递给数据库引擎,而不是作为SQL语句的一部分进行解析:

let id = 1;
let name = 'row name';
/* Either pass in a dictionary to use named bound parameters */
db.run("INSERT INTO tableName VALUES(:id, :name)", { ':id': id, ':name': name });
/* Or an array to use positional bound parameters */
db.run("INSERT INTO tableName VALUES(?, ?)", [id, name]);

更多信息可在SQLite文档和sqljs文档中获得。

最新更新