【问题标题】:prevent sql injection in rails防止在rails中注入sql
【发布时间】:2013-05-20 07:10:47
【问题描述】:

我正在使用以下查询来查找最近的位置谷歌地图。它是否对 Sql 注入免疫。如果没有,任何人都可以帮助我摆脱它。

AlphaCourses.find_by_sql("SELECT *,(  6371 * acos( cos( radians( #{@latitude} ) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians( #{@longitude} ) ) + sin( radians( #{@latitude} ) ) * sin( radians( latitude ) ) ) ) AS distance FROM alpha_courses HAVING distance <= #{@radius} ORDER BY distance LIMIT 200")

提前致谢。

【问题讨论】:

  • 看看这里的第二个例子 - apidock.com/rails/ActiveRecord/Querying/find_by_sql 。避免直接插入属性。
  • 感谢您的重播 我试过这样 AlphaCourses.find_by_sql("SELECT *,( 6371 * acos( cos( radians( ? ) ) * cos( radians( latitude ) ) * cos( radians( longitude ) ) - 弧度( ? ) ) + sin( 弧度( ? ) ) * sin( 弧度( latitude ) ) ) ) AS 距离 alpha_courses HAVING distance
  • 仔细查看此语法 - Post.find_by_sql(["SELECT title FROM posts WHERE author = ? AND created &gt; ?", author_id, start_date])。里面的一切都在一个数组中;您将模型的字段替换为?,然后在逗号之后依次写入它们 - 这里 - author_id, start_date
  • 效果很好 +1 为您提供帮助。非常感谢@kiddorails。
  • 很高兴它对您有所帮助。 :)

标签: ruby-on-rails ruby ruby-on-rails-3.2 gmaps4rails


【解决方案1】:

发件人:http://guides.rubyonrails.org/active_record_querying.html#pure-string-conditions

这段代码

....("orders_count = ?", params[:orders])

比这个代码更可取:

....("orders_count = #{params[:orders]}")

因为参数安全。将变量直接放入 条件字符串将按原样将变量传递给数据库。这 意味着它将是直接来自用户的未转义变量 可能有恶意。如果你这样做,你把你的整个 数据库处于危险之中,因为一旦用户发现他或她可以利用 他们可以对您的数据库做任何事情。从来没有放 您的参数直接在条件字符串中。

将此应用于您的示例!

【讨论】:

  • 但是我在很多方面都尝试过使用 where 子句但我没有使用。你能在哪里申请我的查询@bjelli
  • 重要的不是 where 子句(我把它删掉了)。重要的是使用?在你的 sql 字符串中。
  • 好的,感谢您的帮助。 @bjelli
  • This 回答也可能有用
猜你喜欢
  • 2011-06-12
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
相关资源
最近更新 更多