无法转义单引号

我正在尝试找出一种方法来转义我的“预建”SQL查询中的单引号,我将其发送到泛型函数(我的所有查询都使用它)。


我尝试了转义npm插件,手动完成等。


这是我构建查询的代码位,当我输入例如“it's”时,由于特殊字符,dataString会出错:


exports.addEntry = (req, res, nomPage, nomTable, data) => {

  Object.keys(data).forEach(function (k, id) {

    console.log(data[k]);

    if (data[k] != null) {

      if (id > 0) {

        columnString += `,`;

        dataString += `,`;

      }

      columnString += `${[k]}`;

      dataString += `'${data[k]}'`;

    }

  });


  try {

    if (!data) throw new Error("Input not valid");

    if (data) {

      var sqlQuery = `INSERT INTO ${nomTable} (${columnString}) VALUES (${dataString})`;

      connect.connectDatabase(sqlQuery, (data, err) => { 

[...]

我之前谈到的泛型函数是这样的:



var sql = require("mssql"); 

var config = require("../settings").config; 


exports.connectDatabase = function (rawQuery, callback) {

  var conn = new sql.ConnectionPool(config);

  conn

    .connect()

    .then(function () {

      var req = new sql.Request(conn);

      req

        .query(rawQuery)

        .then(function (recordset) {

          callback(recordset.recordset);

        })

我的计划是让查询只使用一个函数,而不是很多做几乎相同事情的函数。


如果能提供帮助,将不胜感激。


拉风的咖菲猫
浏览 69回答 2
2回答

冉冉说

构建此查询的方式正是您不想执行的操作。它使您对SQL注入完全开放。若要避免此问题,需要参数化查询。这里的额外好处是,它将照顾所有逃跑。下面是一个直接来自 MS 文档的示例,演示如何使用 SQL Server 的节点.js驱动程序执行参数化查询。遵循此范例的代码将如下所示:exports.addEntry = (req, res, nomPage, nomTable, data) => {  Object.keys(data).forEach(function (k, id) {    console.log(data[k]);    if (data[k] != null) {      if (id > 0) {        columnString += `,`;        dataString += `,`;      }      columnString += `${[k]}`;      dataString += `@${data[k]}`;    }  });  try {    if (!data) throw new Error("Input not valid");    if (data) {      var sqlQuery = `INSERT INTO ${nomTable} (${columnString}) VALUES (${dataString})`;      connect.connectDatabase(sqlQuery, (data, err) => { [...]所有改变的是操作构造.dataString请注意,您现在需要将参数馈送到命令执行中,以替换之前嵌入的数据。

皈依舞

有几种方法可以做到这一点:1 - 替换方括号的冒号,这将创建一个字符串值数组,那么你只需要担心通过数组长度进行排序,这将增加你的处理时间,但如果你的应用程序不是太大,它不应该有太大的区别。2 - 用于对字符串中的单引号进行转义或对双引号进行转义。\'\"让我知道这是否有帮助,因为这是一个快速的答案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript