Activerecord: это MySQL безопасно? Если нет, то как я могу его продезинфицировать? - PullRequest
1 голос
/ 15 июля 2011

Я использую метод find_by_sql, и я не уверен, что то, что я делаю, безопасно? Если это не так, как я могу продезинфицировать мои переменные?

Table.find_by_sql("SELECT * FROM TABELS
     WHERE table.`table_id` = '#{params[:table]}'
           and insights.`created_at` >= '#{@stime}'
           and insights.`created_at` <= '#{@etime}'
     GROUP BY places.`id`
     ORDER BY sum(insights.`checkins`) DESC").paginate(:page => params[:page], :per_page => Place.per_page)

1 Ответ

5 голосов
/ 15 июля 2011

Ваш SQL в настоящее время не является безопасным.Сделайте это вместо этого:

Table.find_by_sql(["SELECT * FROM TABLES
     WHERE table.`table_id` = '?'
           and insights.`created_at` >= '?'
           and insights.`created_at` <= '?'
     GROUP BY places.`id`
     ORDER BY sum(insights.`checkins`) DESC",
         params[:table],
         @stime,
         @etime]).
     paginate(:page => params[:page], :per_page => Place.per_page)

Обратите внимание, что параметр find_by_sql является массивом: первый элемент - строка SQL, остальные - параметры в порядке.

...