2017-11-02 8 views
0

私はnodejsを使用しています。私はこれを持っているバニラSQLクエリを作成する場合:整数と注射に対する保護

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

を今、私が知っていたことは、あなたが整数この方法をエスケープする必要があることです。

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

は正しいですか?または、文字列のように脱出する必要がありますか?まったく脱出しない?

+1

「エスケープ」は、おそらくこの場合は右の用語ではありません。 'parseInt'は、文字列が(デフォルトでは)基数10で始まり、残りの文字列を残しているかどうかをチェックします。これは私の意見では良い保護です。 – leaf

+0

あなたはparseIntが良い保護を意味するのですか? – oderfla

+1

はい、それは基本10の整数しか受け入れられないので、他のものは 'NaN'(Not A Number)を与えます。 – leaf

答えて

3

正しいですか?

いいえ、リモートではありません。

または文字列のようにエスケープする必要がありますか?

いいえエスケープ文字列。

まったく脱出しないでください。数字文字列(およびその他)のために

、あなたが使っているものは何でも、データベースAPIのパラメータ化バージョン使用は(「準備された文」または類似)で、物事を「エスケープ」しません。

たとえば、mysql npm moduleを使用していたとします。 the documentationごとに、そのクエリは次のようになります。

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

APIを提供するモジュールに「エスケープ」を残すこと。評判の良いものを使用している場合は、アドホックなソリューションとは対照的に、徹底的にテストされ、戦略的に実証されています。

より:http://bobby-tables.com/