无法将 sha256 哈希插入 SQLite3 表 - NodeJs



我正在使用SQLite3和NodeJs创建一个sha256哈希表 尝试插入整数和随机哈希时,出现以下错误。

{ Error: SQLITE_ERROR: no such column: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 errno: 1, code: 'SQLITE_ERROR' }

这是用于创建数据并将其插入表中的源

// * Create ~ Open Hashes Database
let db = new sqlite3.Database('./hashes.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (e => {
if (e) {
console.log('Failed to open/create hashes database')
}
console.log('Successfully opened / created')
}));
const hash = crypto.createHash('sha256').digest('hex');
// * 1 Create Database
db.run("CREATE TABLE hashes(seq INTEGER PRIMARY KEY, hash VARCHAR(255) NOT NULL)", (e) => {
if (e) return console.log(e);
console.log('Created database')
});
db.run(`INSERT INTO hashes VALUES (1, ${hash})`, (e) => {
if (e) return console.log(e);
console.log("successfully inserted", 1, hash);
})

第 1 列 (Seq( 只是一个连续递增的整数 (1,2,3....( 第二列是 VARCAR 类型的哈希。

请上帝使用参数而不是字符串插值将动态值传递到查询中。任何与任何SQL引擎接口编程语言都是如此。字符串内插会让您面临大量 sql 注入漏洞,请参阅 https://bobby-tables.com/

这在节点 sqlite3 API 中有明确的文档和推荐:

https://github.com/mapbox/node-sqlite3/wiki/API#databaserunsql-param--callback

db.run("UPDATE tbl SET name = ? WHERE id = ?", "bar", 2);

这就好像值"bar"2分别放在两个?的位置上一样。


在您的情况下,这应该可以:

db.run("INSERT INTO hashes VALUES (1, ?)", hash, (e) => {
if (e) return console.log(e);
console.log("successfully inserted", 1, hash);
})

它看起来更好,更容易,更安全。

请注意,我将反引号内插 '-string 更改为双引号 "-string。这是故意的。不要将值内插到 SQL 字符串中。

我认为问题是您直接在查询中使用哈希,而没有将其定义为字符串/varchar,因此sqlite认为它是一个列。

db.run(`INSERT INTO hashes VALUES (1, "${hash}")`, (e) => {
if (e) return console.log(e);
console.log("successfully inserted", 1, hash);
})

相关内容

  • 没有找到相关文章

最新更新