Привет, я пишу приложение на С++, используя libpqxx для вставки строк в таблицу Postgres SQL, и записываемые данные вводятся пользователем, поэтому мне нужно защищаться от атак SQL-инъекций. Из того, что я вижу в Интернете, я могу выбрать два подхода:
- Подготовленные отчеты
std::string name_str = "Bob"; \\! User input unsafe!!
std::string email_str = "[email protected]"; \\! User input unsafe!!
pqxx::connection con(c_string);
std::string insert_str = "INSERT INTO users(name, email) VALUES ($1, $2)";
con.prepare("insert_to_users", insert_str);
pqxx::work insert_work(con);
insert_work.exec_prepared("insert_to_users", name_str, email_str)
- Экранирование строки
std::string name_str = "Bob"; \\! User input unsafe!!
std::string email_str = "[email protected]"; \\! User input unsafe!!
pqxx::connection con(c_string);
pqxx::work insert_work(con);
std::string insert_str = "INSERT INTO users(name, email)"
"VALUES ('" + insert_work.esc(name_str) + "' , '" + insert_work.esc(email_str) + "')";
insert_work.exec(insert_str)
Мое приложение не будет поддерживать соединение с базой данных, поэтому подготовленный оператор будет использоваться только один раз, а затем уничтожаться, поэтому использовать подготовленный оператор слишком сложно?
Обеспечивает ли экранирование строк защиту от всех уязвимостей SQL-инъекций? Или есть лучший способ сделать это?