【问题标题】:node mysql query after crypto decrypt加密解密后的节点mysql查询
【发布时间】: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


【解决方案1】:

我发现了问题。字符串中有隐藏的特殊字符。我添加了这个,现在一切正常。

var dec = decrypt(someencryptedmessage).replace(/[^a-zA-Z0-9 ]/g, "");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多