Способ удаления строки concat в Oracle-db (Nodejs) - PullRequest
0 голосов
/ 10 июля 2019

Есть ли способ запрета конкатата строки в запросе sql, который может вызвать внедрение sql?

searchParameter и searchString - необязательные параметры, полученные из запроса get.Это должно добавить к предложению where, которое будет фильтровать результаты в зависимости от ввода пользователя.

И searchParameter, и searchString не должны иметь значение null, чтобы завершить оператор.

Спасибо.

async getDetails(searchParameter, searchString, skip = 0, limit = 25, transactionSeq) {

    let filterQuery = "";
    if(searchParameter && searchString)
    {
      filterQuery = "AND " + searchParameter + "=" + "'" + searchString + "'";
    }

    const sql = `
      select * from (
      select /*+first_rows(${limit})*/
      a.record_sequence,
      ROW_NUMBER() OVER (ORDER BY a.record_sequence) RN
      from TABLE_NAME a
      WHERE TRANSACTION_SEQUENCE = :t
      ) where RN between :n AND :m ${filterQuery}
      ORDER BY RN 
    `;
    const bindVars = {
      t: transactionSeq,
      n: skip + 1,
      m: skip + limit
    };
    const resultAsync = this._database.simpleExecute(sql, bindVars);

1 Ответ

0 голосов
/ 10 июля 2019

Вы должны внести в белый список любой текст оператора, который вы используете при конкатенации строк. Я предполагаю, что searchParameter соответствует имени столбца, поэтому убедитесь, что значение является столбцом, который существует в таблице. Скинь ошибку, если она не известна. См. Связывание имен столбцов и таблиц в запросах .

Затем используйте переменную связывания для пользовательских данных searchString. Вы можете добавить это к bindVars.

Также вы можете использовать более поздний синтаксис :

const myoffset = 0;       // do not skip any rows (start at row 1)
const mymaxnumrows = 20;  // get 20 rows

const result = await connection.execute(
  `SELECT last_name
   FROM employees
   ORDER BY last_name
   OFFSET :offset ROWS FETCH NEXT :maxnumrows ROWS ONLY`,
  {offset: myoffset, maxnumrows: mymaxnumrows});
...