Подтвердить что ты не робот

Безопасный запрос ActiveRecord

Я пытаюсь написать запрос LIKE.

Я читал, что чистые строковые запросы небезопасны, однако я не мог найти никакой документации, которая объясняла бы, как писать безопасный запрос LIKE Hash Query.

Возможно ли это? Должен ли я вручную защищаться от SQL Injection?

4b9b3361

Ответ 1

Чтобы убедиться, что строка запроса правильно очищена, используйте синтаксис массива или синтаксиса хеша для описания ваших условий:

Foo.where("bar LIKE ?", "%#{query}%")

или

Foo.where("bar LIKE :query", query: "%#{query}%")

Если возможно, что query может содержать символ %, тогда вам нужно дезинфицировать query с помощью sanitize_sql_like первый:

Foo.where("bar LIKE ?", "%#{sanitize_sql_like(query)}%")
Foo.where("bar LIKE :query", query: "%#{sanitize_sql_like(query)}%")

Ответ 2

Используя Arel, вы можете выполнить этот безопасный и переносимый запрос:

title = Model.arel_table[:title]
Model.where(title.matches("%#{query}%"))

Ответ 3

Для PostgreSQL будет

Foo.where("bar ILIKE ?", "%#{query}%") 

Ответ 4

Вы можете сделать

MyModel.where(["title LIKE ?", "%#{params[:query]}%"])