在Oracle-db(Nodejs)中删除字符串concat的方法

时间:2019-07-10 05:56:41

标签: javascript node.js reactjs oracledb

有没有一种方法可以防止sql查询中的字符串concat可能导致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 :(得分:0)

您应该将在字符串连接中使用的所有语句文本列入白名单。我假设<p> (() => { if(something) return "some text" else return "some other text" })() </p> 与列名匹配,因此请检查该值是否是表中存在的列。如果未知,则抛出错误。参见Binding Column and Table Names in Queries

然后将绑定变量用于用户数据searchParameter。您可以将其添加到searchString

另外,您可能想使用newer limit syntax

bindVars