1

注文時にSQLインジェクションを回避しようとしていますが、NULLが最後であることも確認する必要があります。

query = books.order(@vals['order'] + ' NULLS LAST')

しかし、@vals['order'] を API パラメーターとして使用すると、SQL インジェクションの影響を受けやすくなります。これを回避するために注文を形成するより良い方法はありますか?

4

1 に答える 1

1

これが実際に単なる API である場合は、API コンシューマに特定の種類の順序付けのみを提供し、順序基準をコードで前もって把握します (ホワイトリスト アプローチなど)。

if @evals['order'] == 'title'
  ordering = 'title'
elsif @evals['order'] == 'published'
  ordering = 'created_at'
else
  ordering = 'id'
end

query = books.order(ordering + ' NULLS LAST')

これは最も美しいコードではありませんが、少なくともパラメーターを解析する必要がなくても安全です。

于 2013-08-19T18:40:44.363 に答える