亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法轉義單引號

無法轉義單引號

拉風的咖菲貓 2022-08-27 09:44:25
我正在嘗試找出一種方法來轉義我的“預建”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);        })我的計劃是讓查詢只使用一個函數,而不是很多做幾乎相同事情的函數。如果能提供幫助,將不勝感激。
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

構建此查詢的方式正是您不想執行的操作。它使您對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


請注意,您現在需要將參數饋送到命令執行中,以替換之前嵌入的數據。


查看完整回答
反對 回復 2022-08-27
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

有幾種方法可以做到這一點:1 - 替換方括號的冒號,這將創建一個字符串值數組,那么你只需要擔心通過數組長度進行排序,這將增加你的處理時間,但如果你的應用程序不是太大,它不應該有太大的區別。

2 - 用于對字符串中的單引號進行轉義或對雙引號進行轉義。\'\"

讓我知道這是否有幫助,因為這是一個快速的答案。


查看完整回答
反對 回復 2022-08-27
  • 2 回答
  • 0 關注
  • 85 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號