尝试在 SQL 查询中转义动态字符串 [duplicate]

trying to escape dynamic string in sql query [duplicate]

提问人:Winterella 提问时间:7/16/2022 最后编辑:Dale KWinterella 更新时间:7/29/2022 访问量:770

问:

运行如下所示的 SQL 查询。在这里,如果名称是“Tim's Store”,我如何在下面的查询中转义它。

大多数情况下,name 变量不会有 ',但有时它会,我会遇到错误。

我该如何逃脱呢?

name = Tim's store

var sql = `INSERT INTO CHAT VALUES ('${id}', '${name}')`

DBconnection.query(sql)

javascript mysql sql sql 注入

评论

1赞 Andy Lester 7/16/2022
我强烈建议您不要尝试转义字符串值,而是在 SQL 中使用占位符。你用的是什么语言?
1赞 nbk 7/16/2022
不使用仅准备语句
0赞 Winterella 7/16/2022
@AndyLester Javascript。比如使用 replace(“'”, “''”)。这会起作用吗?
1赞 The Impaler 7/16/2022
您的代码似乎容易受到 SQL 注入的攻击。请改用参数化语句。
0赞 Andy Lester 7/16/2022
@Winterella 你会注意到,很多人告诉你使用带有占位符的准备好的语句,而不是试图转义你的字符串。你遇到的问题,单引号使你的SQL失败,也意味着你对SQL注入持开放态度。您需要使用 SQL 占位符,而不是使用变量构建 SQL。我不知道 Javascript 到底是怎么做到的,但这篇文章似乎是一个很好的起点:veracode.com/blog/secure-development/......Tim's store

答:

0赞 cstax 7/16/2022 #1

为了转义 name 变量,您可以先将完整字符串放在双引号中,然后列出当前拥有的撇号,如下所示:

name = "Tim's store";

你可以在这里找到另一个例子:https://www.digitalocean.com/community/tutorials/how-to-work-with-strings-in-javascript#using-the-alternate-string-syntax

如果您试图转义任何非字母数字符号作为阻止黑客攻击的手段,则需要使用问号占位符,如下所述(伪代码):

name = "Tim's store";

var sql = `INSERT INTO CHAT VALUES ( ? , ?)`

DBconnection.query(sql)

但是,我注意到该帖子被标记为使用 javascript 和 SQL,但 sql 查询后面的函数是 .NET 函数。

但是,我会坚持帖子上的标签所说的内容(即javascript)。为了让 javascript(客户端/前端代码)与 SQL(服务器端)一起使用,您首先需要使用 NodeJs 才能使用 SQL 语句并转义您的。

您需要首先使用此页面上的代码 https://www.geeksforgeeks.org/node-js-mysql-insert-into-table/ 了解如何使用 nodejs 连接到数据库,然后如何添加使用问号符号转义的插入语句,如代码示例中所示。

评论

0赞 Winterella 7/16/2022
使用双引号也不是一种选择。有些字符串也包含双引号,所以我也必须转义它们。还有其他方法吗?
0赞 cstax 7/16/2022
是的,请在此处查看示例和结果部分:afterhoursprogramming.com/tutorial/javascript/...。您将看到您可以使用反斜杠来转义单引号以及其他非字母数字字符。
0赞 Your Common Sense 7/16/2022
1. 转义示例具有误导性。OP 谈论的是变量的内容,而不是在代码中定义字符串。2. 为什么要链接一些外部资源而不是链接来自 Stack Overflow 的答案?3. 这就引出了最后一个问题,为什么要回答一个已经回答了十亿次的问题?