javascript
  • sql-server
  • node.js
  • prepared-statement
  • sql-injection
  • 2017-09-13 4 views 1 likes 
    1

    J'ai besoin d'insérer une chaîne définie en Javascript dans une table MSSQL.Comment créer une instruction préparée dans Node.JS pour MSSQL?

    C'est ce que j'ai jusqu'à présent:

    Javascript:

    var message = "It's a great day today!"; 
    $.post('www.server.com/message='+message, function(response){ 
    console.log(response); 
    }); 
    

    Node.js Serveur:

    //..... a bunch of code has been used to accept the HTTP request and get the message... 
    // for the purpose of this example, the message is asigned to 'NodeMsg' 
    var mssqldb = require("../core/mssql"); 
    var NodeMsg = theMessageReceivedFromHTTPRequest; 
    function saveMessage(message) { 
        mssqldb.executeMssql("insert into messages (message, status) VALUES('"+message+"', 'new')", function (err) { 
         if (err) { 
         httpMsgs.show500(req, resp, err); 
         }//end if 
         else { 
         httpMsgs.sendJson(req, resp, 'success'); 
         }//end else 
        }); 
    }; 
    

    mssql.js (Node.js fichier):

    var mssqldb = require("mssql"); 
    var settings = require("../settings"); 
    
    exports.executeMssql = function(sql, callback) { 
        var conn = new mssqldb.Connection(settings.mssqlConfig); 
        conn.connect() 
        .then(function(){ 
        var req = new mssqldb.Request(conn); 
        req.query(sql) 
        .then(function (recordset) { 
         callback(recordset); 
        }) 
        .catch(function(err){ 
         console.log(err); 
         callback(null, err); 
        }); 
        }) 
        .catch(function(err){ 
        console.log(err); 
        callback(null, err); 
        }); 
    };//end executeMssql 
    

    Résumé de ce qui se passe:

    1. Je définit un message sous forme de chaîne. (Notez qu'il contient une citation unique)
    2. J'envoie cette chaîne au serveur Node.js
    3. J'utilise Node.js pour envoyer la chaîne à MSSQL

    Le problème: Après avoir appris plus sur le programme orienté objet, j'ai réalisé que la façon dont j'effectue l'insertion est fortement désapprouvée car elle est ouverte à l'injection SQL. En outre, le code se casse pendant l'exécution de la requête SQL en raison de la citation unique dans la chaîne.

    La solution: Selon la plupart des ressources que j'ai trouvées, la solution consiste à utiliser des «instructions préparées».

    Ma question:

    Comment diable puis-je convertir ce que je l'ai déjà fait, d'utiliser des déclarations préparées? J'ai cherché sur le web des heures et je ne peux pas trouver un bon exemple de comment faire une déclaration préparée avec Node.JS pour MSSQL (pas MySQL) qui est compréhensible pour un débutant à Node.Js

    Répondre

    0

    Si vous utilisez le La mise en œuvre du pilote MSSQL multiplateforme fastidieuse, la documentation est ici: http://tediousjs.github.io/tedious/parameters.html

    Fondamentalement, vous préparez une instruction SQL avec des espaces réservés '@xxx' pour les valeurs que vous devez injecter, vous liez les valeurs réelles de ces paramètres à votre demande, puis exécutez votre demande.

     Questions connexes

    • Aucun problème connexe^_^