Возможна ли атака с использованием SQL-инъекции в QLDB/PartiQL
Этот вопрос возник при обзоре кода в отношении запроса выбора, который обязательно создается с использованием интерполяции строк (C #), и я не могу найти ссылку тем или иным способом. Например, запрос может выглядеть примерно так:
var sql = "SELECT * FROM {someTable} WHERE {indexedField} = ?";
Из-за использования параметра в предложении WHERE я думаю, что в любом случае это должно быть безопасно; однако было бы неплохо получить подтверждение. Несколько простых попыток предполагают, что даже если была предпринята попытка инъекции, и запрос в конечном итоге выглядел примерно так
Select * from SomeTable; SELECT * FROM SomeOtherTable Where IndexedField = "1"
двигатель по-прежнему выдает ошибку при попытке выполнить несколько запросов.
2 ответа
Инъекции вроде
Select * from SomeTable; SELECT * FROM SomeOtherTable Where IndexedField = "1"
действительно будет ошибка, потому что драйвер QLDB требует одного
txn.Execute()
на запрос.
Чтобы снизить риск укола, я бы рекомендовал:
- дезинфекция строковой интерполяции для отклонения потенциально вредоносных параметров
- использование функции QLDB, которая позволяет разделить доступ с помощью команд PartiQL и таблицы реестра с использованием политик IAM, https://aws.amazon.com/about-aws/whats-new/2021/06/amazon-qldb-supports-iam-based -access-policy-for-partiql-query-and-ledger-таблицы /
Для второго варианта вы можете определить разрешения для определенной таблицы, чтобы отклонить нежелательный доступ в случае попытки инъекции.
Какая-либо конкретная причина, по которой требуется интерполяция строк?
https://docs.aws.amazon.com/qldb/latest/developerguide/driver-quickstart-dotnet.html#driver-quickstart-dotnet.step-5 использование параметра, вероятно, лучше всего поможет предотвратить внедрение sql.