Подготовленное заявление AWS Aurora MySQL
У меня есть запрос на вставку, который я хочу выполнить с помощью клиента AWS JavaScript V3 в базе данных AWS Aurora MySQL Serverless. Я использую Data API базы данных. Я получил настройку в своем коде, и я могу подключаться и выполнять произвольные SQL-запросы, используя
ExecuteStatementCommand
.
Я хотел бы знать, как я делаю подготовленные операторы SQL и выполняю их. у меня есть
INSERT
запрос, значения которого предоставляются пользователем. Я не могу просто объединить эти значения в SQL-запрос, так как это создаст уязвимость SQL-инъекции.
К сожалению, я не смог найти, как создавать подготовленные операторы и выполнять их в
@aws-sdk/client-rds-data
документация пакета.
Если кто-то знает, как это сделать, может кто-нибудь, пожалуйста, объясните. Заранее большое спасибо!
1 ответ
Я не являюсь пользователем AWS SDK для client-rds-data, но я делаю вывод из документации и собственных знаний MySQL.
Я вижу, что интерфейс ExecuteSqlCommandInput имеет свойство
sqlStatements
, что позволяет использовать несколько операторов SQL, разделенных точкой с запятой. Это исключает использование параметров запроса, потому что в MySQL вы не можете использовать prepare() для строки, содержащей несколько операторов SQL.
Принимая во внимание , что ExecuteStatementCommandInput имеет свойство (один оператор) и свойство
parameters
который представляет собой массив скалярных параметров (т. е. каждый скаляр соответствует одному заполнителю параметра в
sql
нить). Это должно позволить вам запустить параметризованный SQL-запрос.
Что касается вашего комментария: когда вы сказали, что хотите использовать подготовленные операторы, чтобы избежать уязвимостей SQL-инъекций, я предположил, что вы понимаете, как подготовленные операторы защищают от этих уязвимостей.
На самом деле, использование подготовленных операторов само по себе не является защитой. Вы должны отделить динамические входные данные от вашего SQL-запроса с помощью параметров запроса. Просто случается так, что использование параметров запроса требует использования подготовленных операторов, поэтому люди говорят «использовать подготовленные операторы» для защиты от SQL-инъекций, когда они должны говорить «использовать параметры запроса, что подразумевает, что вы должны использовать подготовленные операторы».
Существует множество руководств по использованию SQL с параметрами запроса. Вот один для Node.js: https://www.veracode.com/blog/secure-development/how-prevent-sql-injection-nodejs
Соглашение о вызовах для AWS SDK другое, но концепция та же. Я нашел только справочную документацию для AWS SDK, без примеров кода или документации по задачам. Это разочаровывает, но, к сожалению, типично для AWS.