我的rails控制器中有以下代码:
State.find_by_id(params[id])
这里params [id]是用户输入
我是否需要清理此参数以使上述调用从SQL注入安全?
答案 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)