次のような文字列を .order メソッドに渡そうとしています
Item.order(orderBy)
orderBy がデフォルトでサニタイズされるかどうか疑問に思っていました。そうでない場合、それをサニタイズする最良の方法は何でしょうか。
次のような文字列を .order メソッドに渡そうとしています
Item.order(orderBy)
orderBy がデフォルトでサニタイズされるかどうか疑問に思っていました。そうでない場合、それをサニタイズする最良の方法は何でしょうか。
注文はサニタイズされません。このクエリは、実際には Users テーブルを削除します。
Post.order("title; drop table users;")
ユーザー入力によって汚染される可能性がorderBy
ある場合は、クエリを実行する前に変数を確認する必要があります。orderBy
このようなものはうまくいくかもしれません:
items = Item.scoped
if Item.column_names.include?(orderBy)
items = items.order(orderBy)
end
.where
これらは句と同じ方法でサニタイズされません?
が、以下を使用できます#sanitize_sql_for_order
:
sanitize_sql_for_order(["field(id, ?)", [1,3,2]])
# => "field(id, 1,3,2)"
sanitize_sql_for_order("id ASC")
# => "id ASC"