在rails中find_by_id sql注入安全吗?

时间:2016-06-30 18:37:56

标签: ruby-on-rails ruby sql-injection

我的rails控制器中有以下代码:

State.find_by_id(params[id])

这里params [id]是用户输入
我是否需要清理此参数以使上述调用从SQL注入安全?

3 个答案:

答案 0 :(得分:2)

是的,这个方法是ActiveRecord :: FinderMethods,它是安全的。

小例子:

User.find_by_id("' OR 1 --")
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 0]]

=> nil

答案 1 :(得分:0)

find_by已经消毒了params。

答案 2 :(得分:0)

find_by_id使用to_i,因此这里不能使用任何字符串。 Person.find_by_id('any string')Person.find_by_id(0)相同。

  

按id查找 - 这可以是特定的id(1),id列表(1,5,6),也可以是id数组([5,6,10])。        如果找不到所有列出的ID的记录,则会引发RecordNotFound。如果是主键        是一个整数,由id查找使用+ to_i +。

强制其参数
Person.find(1)          # returns the object for ID = 1
Person.find("1")        # returns the object for ID = 1
Person.find("31-sarah") # returns the object for ID = 31
Person.find(1, 2, 6)    # returns an array for objects with IDs in (1, 2, 6)
Person.find([7, 17])    # returns an array for objects with IDs in (7, 17)
Person.find([1])        # returns an array for the object with ID = 1
Person.where("administrator = 1").order("created_on DESC").find(1)