我正在尝试创建一个类实例,其中一个特定的键被提取出来并保存以供日后使用
考虑这是param的类型:
Parameters: {"p1": "foo", "p2": "bar", "p3":"param that i want to extract" >
我会做类似的事情:
@my_class = MyClass.new(whiteList_function.except(:p3))
或类似
@my_class = MyClass.new(whiteList_function)
@my_class_key = @my_class.slice(:p3)
我的whiteList_function:
def whiteList_function
params.require(:my_class).permit(:p1,:p2,p3)
end
我担心的是,我搜索了SO,有些人提到了使用except
的安全风险。
所以我的问题是,在这个特定用法中(取出某些密钥并在以后使用它们),我应该使用except
还是slice
?
答案 0 :(得分:2)
将except
与参数哈希一起使用是危险的,因为您说“允许除此之外的任何参数”,因此它会将模型打开以进行质量分配攻击。
除非我没有考虑其他攻击媒介,否则您应该没问题,因为您在whiteList_function
中使用strong_parameters过滤了可接受的参数哈希值。所以,您可以使用slice
或except
进一步过滤该哈希值,无论哪个更吸引您。
答案 1 :(得分:0)
我没有Rails用户,也许我误解了你的问题但是在Ruby中这就是我要做的事情
class MyClass
attr_reader :params
def initialize params
@params = whiteList_function params
end
def whiteList_function params
whiteList = [:p1, :p2]
params.select{|key| whiteList.include? key }
end
end
MyClass.new({"p1": "foo", "p2": "bar", "p3":"param that i want to extract"})
# #<MyClass:0x00000002802a58 @params={:p1=>"foo", :p2=>"bar"}>