Скажем, у меня есть приложение Rails с тремя моделями: Job
, Contractor
, Bid
. Когда подрядчик делает ставку на работу, ставка создается с соответствующими contractor_id
и job_id
. Теперь я хотел бы, чтобы определить объем работы, что данный подрядчик возвращает задания они не еще на торгах:Следует ли считать этот риск инъекцией SQL?
class Job < ActiveRecord::Base
scope :not_bid_on_by, -> (contractor) do
joins(%{
LEFT JOIN bids ON bids.job_id = jobs.id
AND bids.contractor_id = #{ contractor.id }
}).where(bids: { id: nil })
end
end
Несмотря на то, что значение интерполированное непосредственно в joins
строку, я не может думать о случае, когда этот пример был бы уязвим для SQL-инъекции, поскольку он только интерполирует поле id
из данного аргумента. Я знаю, что это плохая практика в целом, но это похоже на доброкачественный экземпляр.
Если я ошибаюсь, и это является угрозой безопасности, существует ли более безопасный способ сделать это? У ActiveRecord нет возможности безопасно интерполировать строку joins
, как и для where
(с ?
или именованными параметрами).
Совершенная. Это хороший инструмент, о котором нужно знать. Благодаря! – ivan