如何清理 sql.js 输入?
how to sanitize sql.js inputs?
我正在使用 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 documentation, as well as sqljs documentation 中提供了更多信息。
我正在使用 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 documentation, as well as sqljs documentation 中提供了更多信息。