0

我有一个插入查询,我想使用 JavaScript V3 AWS 客户端针对 AWS Aurora MySQL 无服务器数据库执行。我正在使用数据库的数据 API。我@aws-sdk/client-rds-data在我的代码中进行了设置,我可以使用ExecuteStatementCommand.

我想知道的是我如何制作 SQL 准备好的语句并执行它们。我有一个INSERT查询,其值是用户提供的。我不能只是将这些值连接到 SQL 查询中,因为它会创建 SQL 注入漏洞。

@aws-sdk/client-rds-data不幸的是,我在包的文档中找不到如何制作准备好的语句并执行它们。

如果有人知道该怎么做,有人可以解释一下。提前非常感谢!

4

1 回答 1

0

我不是用于 client-rds-data 的 AWS 开发工具包的用户,但我从文档中推断出以下内容,以及我自己对 MySQL 的了解。

我看到接口ExecuteSqlCommandInput有一个 property sqlStatements,它允许多个 SQL 语句用分号分隔。这排除了查询参数的使用,因为在 MySQL 中,您不能对包含多个 SQL 语句的字符串使用 prepare()。

ExecuteStatementCommandInput具有一个属性sql(单个语句)和一个属性,该属性parameters是一个标量参数数组(即每个标量对应于sql字符串中的一个参数占位符)。这应该允许您运行参数化的 SQL 查询。


回复您的评论:当您说要使用准备好的语句来避免 SQL 注入漏洞时,我假设您了解准备好的语句如何防止这些漏洞。

事实上,单独使用准备好的语句并不是一种防御。您必须使用查询参数将动态输入与 SQL 查询分开。碰巧使用查询参数需要使用prepared statements,所以人们说“使用prepared statements”来防御sql注入,当他们应该说“使用查询参数,这意味着你必须使用prepared statements”时。

关于使用带有查询参数的 SQL 的教程非常丰富。这是 Node.js 的一个:https ://www.veracode.com/blog/secure-development/how-prevent-sql-injection-nodejs

AWS 开发工具包的调用约定不同,但概念相同。我只找到了 AWS SDK 的参考文档,没有代码示例或面向任务的文档。这令人失望,但不幸的是 AWS 的典型情况。

于 2022-01-10T00:10:36.663 回答