7

我正在使用以下查询来查找最近的位置谷歌地图。它是否对 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")

提前致谢。

4

1 回答 1

10

来自: http: //guides.rubyonrails.org/active_record_querying.html#pure-string-conditions

这段代码

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

比这段代码更可取:

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

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

将此应用于您的示例!

于 2013-05-20T07:13:09.687 回答