JSON.stringifystring防止(我的)SQL注入?

我已经运行了一些获取用户提供的string的node.js代码,调用JSON.stringify(str)并直接将值注入到SQL语句中。

例如

 var x = JSON.stringify(UNSAFE_USER_STRING); mysql_execute('UPDATE foo SET v = ' + x + ' WHERE id = 1'); 

显然这是对JSON.stringify的滥用,但是这不是我的代码,作者希望在修补它之前看到攻击向量。 因为UNSAFE_USER_STRING是一个string,而不是一个对象,并逃避了显而易见的"\如果有一个严重的问题并不明显

这个代码安全吗? 如果不是,有人可以certificate什么是不安全的input?

谢谢!

如果你确定x是一个string,那么我99%确定这使得不可能进行SQL注入攻击。 当你不确定x的types时,我的信心下降到90%。 这就是说,考虑到以下所有情况不应该构成一个漏洞:

  • Null,NaN,Infinity,-Infinity都似乎回到了零,这是安全的。
  • 未定义返回值为undefined,不是string,所以我不确定。 我认为这会被认为是无效的SQL,而不是构成一个漏洞。
  • 在node.js中的dateJSON.stringify(new Date())返回'“2015-11-09T18:53:46.198Z”'这正是你想要的。
  • 数组和对象应该导致无效的SQL,尽pipe智能转换可以成功使用SQL数组。 也就是说,可能有一些棘手的方法来填充可能会导致漏洞的对象,但是我怀疑它。
  • hex似乎只是将其转换为一个整数。
  • 缓冲区和Uint8Arrays似乎回来作为对象。 再一次,可能有某种方式来填充对象的东西,这将是一个漏洞,但我怀疑它。

即使像“正在被转义的字符,用于注释的字符(组合) – 或#仍然可以使WHERE子句被忽略。