Heim  >  Artikel  >  Web-Frontend  >  Methoden zur Verhinderung der SQL-Injection in Node-MySQL

Methoden zur Verhinderung der SQL-Injection in Node-MySQL

不言
不言Original
2018-06-30 11:38:542889Durchsuche

Jeder weiß, dass die SQL-Injection ein sehr gefährliches Problem für Websites oder Server darstellt. Wenn dieser Aspekt nicht gut gehandhabt wird, kann die Website jederzeit injiziert werden. Daher fasst dieser Artikel die Probleme in Node-MySQL zusammen Beachten Sie verschiedene gängige Vorgehensweisen zur Verhinderung der SQL-Injection.

Einführung in die SQL-Injection

SQL-Injection ist eine der häufigsten Netzwerkangriffsmethoden. Sie nutzt nicht den BUG des Betriebssystems Um den Angriff zu implementieren, zielt er stattdessen auf die Nachlässigkeit des Programmierers beim Programmieren ab, um mithilfe von SQL-Anweisungen eine Anmeldung ohne Konto zu erreichen und sogar die Datenbank zu manipulieren.

SQL-Injection in Node-MySQL verhindern

Um SQL-Injection zu verhindern, können Sie die in SQL übergebenen Parameter statt direkt als String kodieren Verkettung. In Node-MySQL gibt es vier gängige Methoden, um SQL-Injection zu verhindern:

Methode 1: Verwenden Sie escape(), um die eingehenden Parameter zu kodieren:

Es gibt drei Methoden zur Parameterkodierung:

mysql.escape(param)
connection.escape(param)
pool.escape(param)

Zum Beispiel:

var userId = 1, name = 'test';
var query = connection.query('SELECT * FROM users WHERE id = ' + connection.escape(userId) + ', name = ' + connection.escape(name), function(err, results) {
  // ...
});
console.log(query.sql); // SELECT * FROM users WHERE id = 1, name = 'test'

Die Codierungsregeln für die Escape()-Methode lauten wie folgt:

Zahlen werden nicht konvertiert;

Boolesche Konvertierung in wahr/falsch;

Datumsobjekt wird in „JJJJ-MM-TT HH:ii:ss“-Zeichenfolge konvertiert.

Puffer werden in Hex-Zeichenfolge konvertiert as ', 'b';

Mehrdimensionale Arrays werden in Gruppenlisten konvertiert, z. B. [['a', 'b'], ['c', 'd']] zu 'a' , 'b'), ('c', 'd');

Objekte werden in Schlüssel=Wert-Paare umgewandelt. Verschachtelte Objekte werden in Zeichenfolgen konvertiert;

undefiniert/null wird in NULL konvertiert;

MySQL unterstützt NaN/Infinity nicht und löst einen MySQL-Fehler aus.


Methode 2: Verwenden Sie den Abfrageparameter-Platzhalter von Connection.query():


Kann ? als Abfrageparameter-Platzhalter verwenden. Bei Verwendung von Platzhaltern für Abfrageparameter wird die Methode automatisch intern aufgerufen, um die eingehenden Parameter zu kodieren. Zum Beispiel:

var userId = 1, name = 'test';
var query = connection.query('SELECT * FROM users WHERE id = ?, name = ?', [userId, name], function(err, results) {
  // ...
});
console.log(query.sql); // SELECT * FROM users WHERE id = 1, name = 'test'
connection.escape()

Das obige Programm kann auch wie folgt umgeschrieben werden:

var post = {userId: 1, name: 'test'};
var query = connection.query('SELECT * FROM users WHERE ?', post, function(err, results) {
  // ...
});
console.log(query.sql); // SELECT * FROM users WHERE id = 1, name = 'test'

Methode 3: Verwenden Sie escapeId(), um die SQL-Abfrage-ID zu codieren:

Wenn Sie der übergebenen SQL-ID nicht vertrauen Vom Benutzer (Datenbank, Tabelle, Zeichenname) können Sie zum Codieren die Methode escapeId() verwenden. Wird am häufigsten zum Sortieren usw. verwendet. verfügt über die folgenden drei Methoden mit ähnlichen Funktionen:

mysql.escapeId(identifier)
connection.escapeId(identifier)
pool.escapeId(identifier)

escapeId()Zum Beispiel:

var sorter = 'date';
var sql  = 'SELECT * FROM posts ORDER BY ' + connection.escapeId(sorter);
connection.query(sql, function(err, results) {
 // ...
});

Methode 4: Verwenden Sie mysql.format(), um Parameter zu maskieren:

Bereiten Sie die Abfrage vor, und die Funktion wählt die aus Geeignete Escape-Methoden-Escape-Parameter werden zur Vorbereitung von Abfrageanweisungen verwendet. Diese Funktion wählt automatisch die entsprechenden Methoden-Escape-Parameter aus. Zum Beispiel:

var userId = 1;
var sql = "SELECT * FROM ?? WHERE ?? = ?";
var inserts = ['users', 'id', userId];
sql = mysql.format(sql, inserts); // SELECT * FROM users WHERE id = 1
mysql.format()

Ich hoffe, dass es für alle hilfreich ist Verwandte Inhalte, achten Sie bitte auf die chinesische PHP-Website!

Verwandte Empfehlungen:

Über den Unterschied zwischen fs.stat und fs.fstat in node.js

NodeJs Formulardatenformat Übertragungsdateimethode

Über Nodejs serverseitige Zeichenkodierung, Dekodierung und verstümmelte Verarbeitung


Das obige ist der detaillierte Inhalt vonMethoden zur Verhinderung der SQL-Injection in Node-MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn