Рекомендации по экранированию строки в AWS RDS DataService с помощью Aurora postgres serverless
Клиент RDSDataService также поддерживает параметризованные запросы, позволяя использовать параметры-заполнители в операторах SQL. Экранированные входные значения позволяют разрешать эти параметры во время выполнения. Параметризованные запросы полезны для предотвращения атак с использованием SQL-инъекций.
Но когда я использую его с Postgres, передайте строку: myname's
и это нарушает мой синтаксис SQL. Я не уверен, как RDSDataService справляется с атаками SQL-инъекций, как они написаны в документе.
Может ли кто-нибудь помочь мне объяснить это? а как быть в таком случае с безопасной SQL String?
ОБНОВЛЕНО: извините за мою плохую работу. RDSDataService уже экранировал строковый литерал при использовании параметризованных запросов.
1 ответ
Вот базовый код для получения возвращаемых значений из Redshift или Aurora и преобразования их для вставки в базу данных в пакетном наборе параметров:
Возьмите свой ответ, включая метаданные, и передайте его в эту функцию. Он будет разбираться как строки или целые числа. Если вам нужно больше поддерживаемых типов данных, вам придется создать больше операторов if в функции ниже:
Затем вы можете вставить с помощью BatchExecuteStatementCommand из AWS SDK:
const rds_client = new RDSDataClient({ region: "us-east-2" });
let insert_sql = `INSERT INTO dealer_inventory (
dealer_name,
city,
vehicle_count
) VALUES (
:dealer_name,
:city,
:vehicle_count
)`;
try {
// insert data
const insert_params = {
database: "dev",
parameterSets: parameterSets,
sql: insert_sql,
secretArn: process.env.SECRET_ARN,
resourceArn: process.env.RESOURCE_ARN,
};
const insert_command = new RDSBatchExecuteStatementCommand(insert_params);
var insert_response = await rds_client.send(insert_command);
} catch (error) {
console.log("RDS INSERT ERROR");
console.log(error.message);
} finally {
console.log("Inserted: ");
console.log(insert_response);
}