Из активной активной записи рельсов руководство по SQL-инъекции
Этот код является очень предпочтительным:
Client.where( "orders_count =?", params [: orders])
к этому коду:
Client.where( "orders_count = # {params [: orders]}" )
Моя проблема в том, что я хочу использовать предложение LIKE с подстановочным знаком. Мой старый запрос выглядит так:
User.where("first_name LIKE '%#{first_name}%'")
Что уязвимо для SQL-инъекции, но если я это сделаю:
User.where("first_name LIKE '%?%'", first_name)
Затем полученный sql выглядит так:
SELECT "users".* FROM "users" WHERE (first_name LIKE '%'michael'%')
что является недопустимым из-за дополнительных одинарных кавычек.
Каков наилучший способ использования подстановочных знаков и предложение LIKE, а также защита от атак с SQL-инъекциями?