2017-11-02 2 views
0

Im mit Nodejs. Wenn eine Vanille-SQL-Abfrage erstellen Ich habe diese:Integer und Schutz gegen Injektion

var id = req.body.id; 
var query = "select from table where id = " + id; 

Nun, was ich wusste, ist, dass man ganze Zahl auf diese Weise entkommen sollte:

var id = parseInt(req.body.id); 

Ist das richtig? Oder solltest du wie eine Schnur entkommen? Oder gar nicht entkommen?

+1

"Flucht" ist wahrscheinlich nicht der richtige Begriff in diesem Fall. 'parseInt' überprüft, ob die Zeichenfolge mit einer (standardmäßig) Basis 10 beginnt und den Rest der Zeichenfolge zurücklässt. Dies ist meiner Meinung nach ein guter Schutz. – leaf

+0

Sie meinen, parseInt ist ein guter Schutz? – oderfla

+1

Ja, ich denke schon, da nur ganze Zahlen der Basis 10 akzeptiert werden, gibt alles andere 'NaN' (Not A Number). – leaf

Antwort

3

Ist das richtig?

Nein, nicht entfernt.

Oder Sie sollten wie eine Schnur entkommen?

Nein. Sie sollten auch Sie Escape-Zeichenfolgen.

Oder gar nicht entkommen?

Für Zahlen und Strings (und andere), verwenden, was auch immer die parametrisierte Version der Datenbank-API Sie verwenden ist („Prepared Statements“ oder ähnliches), nicht „escape“ Dinge.

Angenommen, Sie verwenden beispielsweise mysql npm module. Per the documentation, würde diese Abfrage sein:

connection.query('select from table where id = ?', [req.body.id], function (error, results, fields) { 
    // ... 
}); 

, dass die „Flucht“ an das Modul die Bereitstellung der API lässt. Wenn Sie ein seriöses verwenden, wurde es gründlich getestet und im Kampf erprobt, im Gegensatz zu Ad-hoc-Lösungen.

Mehr: http://bobby-tables.com/