2016-10-08 34 views
0

私は、オフセットとリミットを持って製品をフェッチする機能を持っています。sequelize(node.js)でエスケープ文字列を使用する必要がありますか?

function f(offset,limit, callback) { 
    models.Product.findAll({ 
    offset: offset,limit: limit 
    }).then(function (products) { 
    ... 
    }).catch(function (error) { 
      callback(error, null); 
    }); 
    } 

サーバーは、クライアントからのPOSTクエリによってオフセットと制限を取得します。 限界値とオフセット値を自分でチェックするか、後で続けるのが私の代わりに行うべきですか?それは 'キャッチ'メソッドのすべてのエラーをキャッチしますか?

たとえば、サーバーの期待値 - オフセット:0、制限:100、 がありますが、オフセット - -87、制限: 'rchk'などのSQLインジェクションがあります。

私はこのデータをfindAllに渡すか、入力データを自分でチェックしてから渡す必要がありますか?

+0

私はこれらの質問のすべてに答えるsequelizeについて十分に知っているが、質問に対するとしてはありませんあなたがあなたの質問に入力をエスケープする必要があるかどうかの答えは、常にはいです。たとえそれがあなた自身のサーバー側のコードの中から生じたとしても。 –

+1

@JohnHalbert sequelizeは、mongodbでどのようにクエリを実行するかのようなクエリを抽象化します。したがって、OPは、デフォルトの 'findAll'に渡された値をsequelizeライブラリが既にエスケープしているかどうかをチェックする必要があります(ただし、生のクエリが使用されていない限りはそうです)。しかし、それでも、他のSQLライブラリでも、バインドパラメータとクエリプレースホルダを使用してデータをクエリに渡し、ライブラリが内部で正しいエスケープ処理を行うようにする必要があります。 –

答えて

1

Sequelizeは、あなたの限界値とオフセット値をエスケープします(注入攻撃を防ぐため)。しかし、あなたのためにそれを検証することはありません。だから、あるばかが'limit: monkeys'を渡したときにSequelizeDatabaseErrorがスローされないようにするには、自分でそれをスクリーニングする必要があります。

あなたは生のクエリを実行していた場合(Sequelize#queryで、あなたがt.nieseが示唆するように、プレースホルダを使用したいと思います)

関連する問題