这个SQL语句是否容易受到SQL注入攻击?

3

我的索引操作是

def index
  @users = User.without_user(current_user)
end

其中,without_user是一个作用域。

scope :without_user, lambda {|user| where("id <> :id", :id => user.id) }

我在想,这是否是实现此功能的最安全方式,还是存在漏洞?

1
如果您的用户ID不是SQL注入,则一切正常。 - lx00st
1
看起来不错。只要你不插入用户输入,就应该是安全的。 - NM Pennypacker
2个回答

2

看起来不错,这里无法进行SQL注入攻击。

另外需要注意的是,在Rails 4中,您可以使用not语法:

scope :without_user, lambda {|user| where.not(id: user.id) }

@Carpetsmoker,lambda的语法糖有什么问题吗? - Sharvy Ahmed
@SharvyAhmed,我不确定你是否看到了我的拒绝理由,但是 -> { 在所有 Ruby 版本中都不起作用。而且一些 Ruby 版本在 ->{ 之间使用空格时会出现错误。由于原始问题使用的是 lambda(而不是 ->),因此在答案中保持相同的风格更有意义。 - Martin Tournoij

2

看起来很好。如果数据被插值,则应该是安全的,这似乎就是这种情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接