gpt4 book ai didi

mysql - JSON.stringify 字符串是否可以防止 (My)SQL 注入(inject)?

转载 作者:行者123 更新时间:2023-11-29 03:31:17 24 4
gpt4 key购买 nike

我遇到过一些获取用户提供的字符串的 node.js 代码,调用 JSON.stringify(str) 并将值直接注入(inject) SQL 语句。

例如

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

显然这是对 JSON.stringify 的滥用,但这不是我的代码,作者希望在修补它之前看到攻击向量。因为 UNSAFE_USER_STRING 是一个字符串,而不是一个对象,并且确实对明显的 "\ 进行了转义,如果存在严重问题则不明显

这段代码安全吗?如果不是,有人可以证明什么是不安全的输入吗?

谢谢!

最佳答案

如果您确定 x 是一个字符串,那么我 99% 确定这使得无法进行 SQL 注入(inject)攻击。当您不确定 x 的类型时,我的信心会下降到 90%。也就是说,考虑到以下所有情况不应构成漏洞:

  • Null、NaN、Infinity、-Infinity 似乎都返回为 null,这是安全的。
  • Undefined 返回值是 undefined,而不是字符串,所以我不确定。我认为它只会被视为无效的 SQL 而不是构成漏洞。
  • node.js 中的日期 JSON.stringify(new Date()) 返回“2015-11-09T18:53:46.198Z”',这正是您想要的。
  • 数组和对象应该会导致无效的 SQL,尽管智能转换可以成功使用 SQL 数组。也就是说,可能有一些棘手的方法可以用可能导致漏洞的对象填充数组,但我对此表示怀疑。
  • Hex 似乎只是将其转换为整数。
  • Buffers 和 Uint8Arrays 似乎作为对象回来了。同样,可能有某种方法可以用可能成为漏洞的东西填充对象,但我对此表示怀疑。

关于mysql - JSON.stringify 字符串是否可以防止 (My)SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30170363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com