2017-09-13 109 views
0

從用戶輸入中簡單地轉義危險字符然後直接運行SQL查詢而不是使用預準備語句是否可以接受?是否可以防止沒有預準備語句的SQL注入(Node.js和MSSQL)

例如,我可以在輸入中使用以下函數,構建查詢並執行它?

function mysql_real_escape_string (str) { 
    return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) { 
     switch (char) { 
      case "\0": 
       return "\\0"; 
      case "\x08": 
       return "\\b"; 
      case "\x09": 
       return "\\t"; 
      case "\x1a": 
       return "\\z"; 
      case "\n": 
       return "\\n"; 
      case "\r": 
       return "\\r"; 
      case "\"": 
      case "'": 
      case "\\": 
      case "%": 
       return "\\"+char; // prepends a backslash to backslash, percent, 
            // and double/single quotes 
     } 
    }); 
} 
+0

可能是這可以幫助你https://github.com/mysqljs/mysql#escaping-query-values – Garfield

+1

這絕對是[XY問題](https://meta.stackexchange.com/a/66378/346723),應該永遠不會出現直接運行查詢和手動嘗試避免注入的情況,比準備語句更安全或更好的情況。你需要做什麼? – ATaco

+0

基本上,我花了一整天的時間試圖弄清楚如何使用準備好的語句(對於Node.js和MSSQL),我沒有太多的運氣。 (我是這個新手)。我希望有一個簡單的選擇。 – cleverpaul

回答

0

創建存儲過程。構建數據訪問層/服務。從應用程序調用服務的方法,從應用程序傳遞適當的方法參數。

在我的Angular代碼中,我從數據存儲庫層調用,實現爲注入到我的組件中的服務。

相關問題