3

pgp-promise ライブラリを使用して簡単なクエリを作成しようとしています。私の元の実装は次のようになります。

var bar = function(orderBy){
  var qs = 'select * from mytable order by ${orderBy};';
  return db.many(qs,{orderBy:orderBy});
}
...
bar('id').then(...)

しかし、これは、私も引用符を追加しようとして、orderBy パラメータに二重引用符を追加non-integer constant in ORDER BY しようとしても役に立たないというエラーを出します。プロジェクトでそのようなコードを望まない理由は明らかなはずですが、実行すること${orderBy}で実用的な解決策があります。var qs = 'select * from mytable order by "' + orderBy + '";'

私の質問: pg-promise を使用して、SQL インジェクションに対して脆弱ではない order by 句を使用してクエリを作成する方法はありますか?

4

1 に答える 1

4

pg-promise を使用して、SQL インジェクションに対して脆弱ではない order by 句を使用してクエリを作成する方法はありますか?

句の値ORDER BYは SQL 名であり、SQL 名を使用してフォーマットされます

const bar = function(orderBy) {
    const qs = 'select * from mytable order by ${orderBy:name}';
    return db.many(qs, {orderBy});
}

一方、:raw/^生のテキストを注入します。これは、外部から来ると SQL インジェクションに対して脆弱であり、サーバー内で作成され、事前にフォーマットされた文字列に対してのみ使用されます。

于 2016-08-24T05:54:57.790 に答える