Как предотвратить инъекцию для моего запроса postgres в узле?

#node.js #postgresql

Вопрос:

Ниже приведена моя база кода с запросом

 export const getQuery = (idList) =gt; {  return `SELECT * from glacier_restore_progress where id in ${idList}`; }  const query = getQuery('(1,2)'); dbResponse = await pool.query(query) ...  

это прекрасно работает. Но проблема с Sql-инъекцией возникает с моего сервера гидролокатора. Поэтому я попробовал изменить приведенный ниже код, но это не сработало,

 ... dbResponse = await pool.query('SELECT * from glacier_restore_progress where id in $1', ['(1,2)']);  

Что я здесь упускаю?

Ответ №1:

Лучшее решение использует функцию ANY с принуждением массива Postgres. Это позволяет сопоставить столбец с произвольным массивом значений, как если бы вы написали col В (v1, v2, v3). Таков подход в ответе перо.

 SELECT * FROM glacier_restore_progress WHERE id = ANY($1::int[])  
 dbResponse = await pool.query('SELECT * FROM glacier_restore_progress WHERE id = ANY($1::int[])', [[1,2, ...]]);