• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] MySQl unter node & Injectionen?

Paykoman

New member
Hallo,

ich bastel jetzt gut 2 Wochen an meinem Server und da das Grundgerüst soweit steht sitze ich jetzt an der Umsetzung für den Einsatz von MySql damit der webSocket-Server auch mit der Datenbank kommunizieren kann!

Zum testen habe ich da selber schon 2 Sachen ausgeführt:
Code:
// nutzbare plugins
striptags = require('striptags'),
escape = require("html-escape");

// test #1
db.query('INSERT INTO contacts (uid, cid, status, grp, date) VALUES (?, ?, ?, ?, ?)', ['9', '7', '3', '7', '2015-09-21 09:11:13']);

// test #2
db.query('SELECT * FROM accounts WHERE id = ?', 7)
            .on('result', function(data){
                // Push results onto the notes array
                //notes.push(data)
				socket.emit('testReceive', data);
				deliver(socket.id, 1, {'testReceive': data});
            });

// weitere Funktion zur validierung
function is_int(n){
   return Number(n) === n && n % 1 === 0;
}

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
        }
    });
}

Klappt beides auch wunderbar, mir scheint das dass mysql-Plugin da stark dem php-PDO folgt und hier auch prep-statements unterstützt.
Mich würde interessieren wie injectionssicher diese sind?

Je nach Anforderung werde ich natürlich noch spezifische Überprüfungen durchführen, wie ID,s auf integer prüfen module für mysql_real_escape nutzten und auch ein stripe_tag modul ist installiert, da sollte das ganze doch nahezu den gleichen Stand wie PHP erreichen oder nicht?


MFG: Paykoman
 
Mich würde interessieren wie injectionssicher diese sind?
Prepared Statements an sich sind 100% injektionssicher. Ob jetzt deine MySQL library tatsächlich auch PS nutzt, kann ich dir nicht sagen, weil ich nicht weiß welche library du benutzt. Bspw. felixge/node-mysql nutzt keine (steht aber auch explizit so in der Doku).
 
Ohh okay, nun was ist dann hiermit habe mich gerade gefreut das PS wohl funktioniert =(

::EDIT::
Ist halt mist wenn man selber noch keine Injektionen iwie gemacht hat und nicht weiß wie genau das funktioniert, gestern haben wir zu zweit mal versucht paar Injektionen zu machen die aber nicht wirklich geklappt haben :(
Womit ich jetzt nicht meine was es ist sondern wie man welche mit korrekter syntax macht, wir haben z.B. versucht eine normale select abfrage zu manipulieren, wobei wir diese ganz normal ausgeführt haben aber dann einen zweiten Befehl anhängen wollten, was im PMA super geklappt hat aber über den user-input iwie nicht =(

Injections-Versuch:
Code:
db.query("SELECT * FROM accounts WHERE id = "+data.id) // id enthielt z.B: "1; neuer query.. ;"
.on('result', function(data){
	console.log('result: '+data);
	socket.emit('testReceive', data);
	deliver(socket.id, 1, {'testReceive': data});
})
.on('end', function(){
	console.log('end');
});
 
Zuletzt bearbeitet:
nun was ist dann hiermit habe mich gerade gefreut das PS wohl funktioniert
da steht nichts von Prepared Statements.

You can use mysql.format to prepare a query with multiple insertion points, utilizing the proper escaping for ids and values.

genauso wie bei mysql.query() steht:

The second form .query(sqlString, values, callback) comes when using placeholder values (see escaping query values)

Also überall wird darauf hingewiesen, daß die Werte escaped werden. kein Prepared Statement weit und breit.


gestern haben wir zu zweit mal versucht paar Injektionen zu machen die aber nicht wirklich geklappt haben
richtiges escaping verhindert so ca. 99% der Versuche. Da muß man schon deutlich mehr über Injections wissen, um da durchzukommen.
 
Zurück
Oben