【问题标题】:Activerecord: Is this MySQL safe? If not how can I sanitize it?Activerecord:这个 MySQL 安全吗?如果不是,我该如何消毒?
【发布时间】:2011-10-05 16:08:09
【问题描述】:

我正在使用 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)

【问题讨论】:

  • 我认为这不安全,因为在 #{params[:table]} 和其他两个连接处,您可以完成查询并删除其他一些内容,对吗?您是否正在寻找这样的东西:stackoverflow.com/questions/1143647/…

标签: mysql ruby-on-rails activerecord sanitization


【解决方案1】:

您的 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 字符串,其余是参数,按顺序排列。

【讨论】:

    猜你喜欢
    • 2011-07-19
    • 2013-08-06
    • 2014-04-01
    • 2015-05-09
    • 1970-01-01
    • 2017-12-29
    • 2014-12-08
    • 2014-06-06
    • 2020-09-10
    相关资源
    最近更新 更多