2016-06-18 13 views
0

Ich verwende node-mysql als Mysql-Konnektor, die meisten der Wert innerhalb der Variablen werden vom Benutzer gesendet und so habe ich Platzhalter verwenden, um SQL-Injektion zu verhindern. In dem Code unten "req.params.TableName" und "req.params.order" wird vom Benutzer gesendet, die Werte der Tabelle und der Auftragsvariablen werden vom Front-End eingegeben, der Wert ist wie folgt.Knoten Mysql Streifen Backticks oder einzelnes Zitat

Werte innerhalb Variablen werden:

req.params.TableName = "officers" 
req.params.order = asc OR desc 

Abfrage:

var table = [req.params.TableName, req.body.order]; 
var query = 'SELECT `officer_id` FROM ?? ORDER BY officer_id ??'; 
fullquery = mysql.format(query, table); 

Problem:

Der obige Code erzeugt folgende Abfrage, die mir eine Syntax Fehler wegen Backticks ar ASC, wie entferne ich diese Backticks?

dank
SELECT `officer_id` FROM `officers` ORDER BY officer_id `ASC`; 

Antwort

0

Versuchen Sie, diese

req.params.TableName = 'officers'; 
req.params.order = asc || desc; 

var table = [req.params.TableName, req.body.order]; 
var query = "SELECT `officer_id` FROM ?? ORDER BY officer_id ??"; 
fullquery = mysql.format(query, table); 
+0

wie wird das die Backticks ausziehen ?? Bitte lesen Sie meine Frage – Wcan

+0

Ich habe diese beiden Zeilen hinzugefügt, nur um zu verstehen, was die Werte der Variablen sein können – Wcan

+0

req.params.TableName = "Offiziere" req.params.order = asc OR desc – Wcan

0

die Antwort gefunden

brauchen nur

.replace(/['`"/\]/g, "") 

verwenden, ich werde jedes Sonderzeichen aus der Zeichenfolge innerhalb der Klammern entfernen.

+0

Schön, dass das dein Problem gelöst hat. Die einzige Nadel hier ist, dass zum Beispiel, wenn Sie eine Zeichenfolge mit "nicht" zum Beispiel es nicht tut;). Seien Sie sich also bewusst, dass wenn Sie versuchen, ein Like mit nicht wird es wahrscheinlich nicht finden –

+1

yeah ich denke, ich muss damit leben, denn wenn kann entweder erlauben oder verbieten es. Ich kann beides nicht gleichzeitig tun, Danke trotzdem – Wcan

+0

Was Sie auch tun könnten, aber das kostet mehr Aufwand ist EncodeURIComponent beim Einfügen in die Datenbank. Beachten Sie dabei, dass alle Abfragen, die Sie an die Datenbank senden, auch EncodeURIComponent sein sollten. Wenn Sie Daten aus der Datenbank auswählen, können Sie DecodeURIComponent verwenden, um keine merkwürdigen Zeichen in Ihrem Ergebnis zu haben. –

1

Ich weiß nicht, wie Mysql Node genau funktioniert, aber ich werde Ihnen ein Beispiel geben.

req.params.TableName = 'officers'; 
req.params.order = asc || desc; 

//Insert statement 
var newOrder = encodeOrder({ 
    name: "'awesome'" 
    price: 1000 
    }) 

var query = "INSERT into orders values ??, ??"; 
fullquery = mysql.format(query, [newOrder.name, newOrder.price]); 

//Like statement 
var query = "SELECT * FROM orders WHERE orders.name LIKE ?"; 
fullquery = mysql.format(query, [encodeURIComponent(order.name)]); 

//DONT KNOW HOW TO EXECUTE >.< 
var result = [{name: "\'awesome\'", price: 1000}] 

for (var index = 0; index < result.length; index++) { 
    result[index] = decodeOrder(result[index]); 
} 

//Result is now 
// [{name: 'awesome', price: 1000}); 

//Can be reused for several objects ofcourse 
function decodeOrder(order) { 
    var result = {}; 

    //My expectation is that order is a object. 
    Object.keys(order).forEach(function (key) { 
    result[key] = decodeURIComponent(order[key]) 
    } 

    return result; 
} 

//Can be reused for several objects ofcourse 
function encodeOrder(order) { 
    var result = {}; 

    //My expectation is that order is a object. 
    Object.keys(order).forEach(function (key) { 
    result[key] = encodeURIComponent(order[key]) 
    } 

    return result; 
} 

Das ist aus meinem Kopf. Also weiß nicht, ob das ausgeführt wird, aber hoffentlich bekommst du die Idee

+0

Awesome bereitstellen. Vielen Dank, daran werden wir arbeiten. – Wcan

+0

Hat es funktioniert @Wcan –

+0

eigentlich fand ich eine andere Lösung, ich machte mein eigenes Modul, um alles außer alphnumberics zu strippen, werde ich es mit Doucmentation auf Github und Npm hochladen, dann können Sie es überprüfen. – Wcan

Verwandte Themen