首页 > 解决方案 > Rails 5,将参数传递给查询 - 它安全吗?

问题描述

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

AFAIK,这是安全的(Rails 5.1)

user = User.where(email: params[:user][:email]).first

如果不是,请告诉我为什么?

标签: ruby-on-rails

解决方案


从某种意义上说,它是安全的,您不需要转义或permit参数。

  • Rails 将自动转义参数以保护您免受 SQL 注入
  • 您无需担心强参数或使用permit,因为您没有进行批量分配

所以代码将完全按照它所说的去做。

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

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


推荐阅读