Ruby on rails Rails 5,将参数传递给查询-安全吗?

Ruby on rails Rails 5,将参数传递给查询-安全吗?,ruby-on-rails,Ruby On Rails,以前可能有人问过,但我需要检查一下 好了,这是安全的(Rails 5.1) user=user.where(email:params[:user][:email])。首先 如果没有,请告诉我原因?它是安全的,因为您不需要转义或允许参数 Rails将自动转义参数,以保护您免受SQL注入的影响 您不需要担心或使用许可证,因为您没有进行大规模作业 因此,代码将完全按照它所说的做 但是,在调用此操作的人可以查询数据库中的任何用户的意义上,它可能仍然是“不安全的” 通常,只有在调用方经过身份验证且允许

以前可能有人问过,但我需要检查一下

好了,这是安全的(Rails 5.1)

user=user.where(email:params[:user][:email])。首先


如果没有,请告诉我原因?

它是安全的,因为您不需要转义或
允许
参数

  • Rails将自动转义参数,以保护您免受SQL注入的影响
  • 您不需要担心或使用
    许可证
    ,因为您没有进行大规模作业
因此,代码将完全按照它所说的做

但是,在调用此操作的人可以查询数据库中的任何用户的意义上,它可能仍然是“不安全的”


通常,只有在调用方经过身份验证且允许查看数据库中的所有用户时,这才是安全的。否则,任何人都可以快速检查存在哪些用户,甚至可能更糟。

是的,危险的是在不过滤参数的情况下使用参数,以及在创建/更新记录时使用参数。这不是你在做的。但这取决于您对该
用户所做的操作。您应该详细说明整个操作。如果
params[:user]
nil
您将得到一个例外,在此行之前有一个nil检查。或者
params.fetch(:user,:email)
,如果其中一个为
nil