【发布时间】:2017-05-06 12:46:10
【问题描述】:
var crypto = require('crypto'); <-- standart
var mysql = require('mysql'); <-- standart
var decrypt = function (encryptedMessage) {
var decryptor = crypto.createDecipheriv('aes-256-cbc','somepass', 'somevector');
decryptor.setAutoPadding(false);
return decryptor.update(encryptedMessage, 'hex', 'utf8') + decryptor.final('utf8');
};
var dec = decrypt(someencryptedmessage);
console.log(dec); <-- working as expected
connection.query("UPDATE table SET some_column = 1 WHERE id = '" + dec + "'");
//Query sent like this UPDATE table SET some_column = 1 WHERE id = ''
所以我认为异步竞赛或其他方面的问题。我怎样才能解决这个问题 ?谢谢。
【问题讨论】:
-
乍一看还可以,但试试escaping
dec。 -
connection.query("UPDATE table SET some_column = 1 WHERE id = '" + dec + "'");永远不要这样做! 这非常危险。相反,use?to escape values,像这样:connection.query("UPDATE table SET some_column = 1 WHERE id = ?", [ dec ]); -
连接从何而来...?
-
不,同样的结果。连接正常(抱歉,这可能是粗鲁的回答)。我有稳定的程序,今天决定加密一些以与上述相同的方式工作的值,并且长时间工作没有任何问题。所以逃跑没有用。 dec 变量 - 由 9 个数字组成。 id 列 - 数据库中的 VARCHAR。我曾尝试使用回调和承诺,但没有任何帮助。我花了半天的时间无法解决这个问题)我有强烈的感觉查询触发得太快了。我还尝试了 setTimeout 进行查询 - 没有。
-
您可能必须发布 MCVE 而不仅仅是代码的某些部分,您发布的内容本质上没有任何问题(除了传递未转义的值,这有点减轻了用你控制的密钥加密)。
标签: javascript mysql asynchronous