首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用转义字符“是什么意思?”而不是在JavaScript中构造SQL查询时使用模板文字?

使用转义字符“是什么意思?”而不是在JavaScript中构造SQL查询时使用模板文字?
EN

Stack Overflow用户
提问于 2022-04-28 01:30:01
回答 2查看 61关注 0票数 2

今天,在我的引导营中,我们开始在Node.js中构建和运行SQL查询。一旦我们讨论了基础知识,我的导师就教我们如何使用“?作为转义字符,这在某种程度上防止了SQL注入。我想我理解这个概念的要点,但对于为什么要这样做而不是在模板文字中插入任何变量,我感到非常困惑。例如:

代码语言:javascript
复制
db.query("DELETE FROM foo WHERE id = ?", [bar], function (err, result){})

代码语言:javascript
复制
db.query(`DELETE FROM foo WHERE id = ${bar}`, function (err, result){})

我的指导员并不总是最好的,但他被证明是非常有知识的,所以我相信这是有原因的。在过去,我们注意到他经常使用更古老的技术,这些技术已经被语言中最近的一些新技术所取代;这可能是他这样做的一个例子吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-28 01:39:56

直接插值样

代码语言:javascript
复制
`DELETE FROM foo WHERE id = ${bar}`

这不是一个好主意,因为如果bar是动态生成的,比如从用户那里获取,这可能会导致SQL注入。见鲍比桌

虽然理论上可以使用一个输入字符串,并尝试正确地对其进行消毒,然后自己直接插入结果--如果您搞砸了,您就会遇到麻烦。因此,数据库驱动程序通常提供一种不同的传入方式--可能是不可信的输入,因此所有这些都可以抽象到数据库驱动程序中--这使开发人员更加容易。这样,数据库驱动程序就可以实现它一次,而不是每个用户都必须实现它(并希望他们正确地实现它),而是让每个人都使用它。

对于这种特殊情况,mysql将分析传入的字符串,并将?替换为第二个参数的正确转义版本。

在过去,我们注意到他经常使用更古老的技术,这些技术已经被语言中最近的一些新技术所取代;这可能是他这样做的一个例子吗?

不,你在问题中展示的方法是非常正常和现代的。

票数 2
EN

Stack Overflow用户

发布于 2022-04-28 01:49:59

第一个参数映射到第一个问号。这种最小的更改确保了对输入值进行转义,从而防止了这里的SQL注入攻击。

查一下这个帖子我们为什么要用?在查询中。

问号在MySQL中“哪里列= ?”中的意义是什么?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72036995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档