我的索引操作是
def index
@users = User.without_user(current_user)
end
其中,without_user
是一个作用域。
scope :without_user, lambda {|user| where("id <> :id", :id => user.id) }
我在想,这是否是实现此功能的最安全方式,还是存在漏洞?
我的索引操作是
def index
@users = User.without_user(current_user)
end
其中,without_user
是一个作用域。
scope :without_user, lambda {|user| where("id <> :id", :id => user.id) }
看起来不错,这里无法进行SQL注入攻击。
另外需要注意的是,在Rails 4中,您可以使用not语法:
scope :without_user, lambda {|user| where.not(id: user.id) }
-> {
在所有 Ruby 版本中都不起作用。而且一些 Ruby 版本在 ->
和 {
之间使用空格时会出现错误。由于原始问题使用的是 lambda
(而不是 ->
),因此在答案中保持相同的风格更有意义。 - Martin Tournoij看起来很好。如果数据被插值,则应该是安全的,这似乎就是这种情况。