mysql 插入集合?语法

Mysql INSERT INTO SET ? syntax

提问人:Talal Anwer 提问时间:2/25/2022 最后编辑:Talal Anwer 更新时间:2/28/2022 访问量:1001

问:

await query(`INSERT INTO feedback.app_v2 SET ?`, feedback)

我写了这一行来代码到我的 JS 项目中,以在相关表中插入数据。

我想问一下这个MySql语法是否对Sql注入是安全的? 此处,反馈是一个对象,其键与app_v2表列匹配。

javascript mysql sql-insert sql-注入

评论

0赞 nbk 2/25/2022
是的,这是安全的,请参阅 stackoverflow.com/questions/15778572/...

答:

0赞 Bill Karwin 2/25/2022 #1

这不是有效的MySQL语法。

这是有效的MySQL语法:

INSERT INTO feedback.app_v2 SET mycolumn = ?

是的,它不受 SQL 注入的影响,因为动态值仅限于查询参数。在分析查询之前,这不会与查询合并,因此参数无法引入意外语法。


如果 NPM 包可以执行字符串替换以将语法放入查询字符串中,则这不是真正的查询参数。在分析查询之前,赋值必须是查询的一部分,但在分析查询之前,正确的查询参数不会与查询组合。key = 'value'

因此,您依赖于 NPM 包中的代码来执行字符串替换,而不会出现任何导致 SQL 注入漏洞的错误。

评论

0赞 Talal Anwer 2/25/2022
我想我没有提供足够的信息,但这是mysql npm包的有效语法。在执行查询之前,它会自动将对象键转换为键 = 'value' 语法。