2017-09-13 3 views
0

Est-il acceptable d'échapper simplement les caractères dangereux de l'entrée utilisateur, puis d'exécuter la requête SQL directement, plutôt que d'utiliser des instructions préparées? Par exemple, est-ce que je pourrais juste utiliser la fonction suivante sur l'entrée, compiler la requête et puis l'exécuter?Est-il possible d'empêcher l'injection SQL sans instructions préparées (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

peut être cela pourrait vous aider https://github.com/mysqljs/mysql#escaping-query-values ​​ – Garfield

+1

Ceci est certainement un cas de [Problème XY] (https://meta.stackexchange.com/a/66378/346723), il ne devrait jamais y avoir de situation dans laquelle exécuter une requête directement et manuellement en essayant d'éviter l'injection est plus sûr ou mieux que de préparer l'instruction. Qu'est-ce que vous avez besoin de cela? – ATaco

+0

Fondamentalement, j'ai passé toute la journée à essayer de comprendre comment utiliser les instructions préparées (pour Node.js et MSSQL) et je n'ai pas eu beaucoup de chance. (Je suis un débutant à cela). J'espérais une alternative facile. – cleverpaul

Répondre

0

Créer une procédure stockée. Construire un couche/service d'accès aux données. Appelez les méthodes sur le service à partir de l'application en passant les paramètres de méthode appropriés à partir de l'application.

Dans mon code Angular, j'appelle depuis une couche de référentiel de données implémentée en tant que service injecté dans mes composants.