在 RoR 中使用简单 find_by 的 NoSQL 注入

NoSQL Injection with a simple find_by in RoR

我是 RoR 的新手,我有一个基本问题。

一位同事告诉我,以下代码可能会导致 NoSQL 注入:

User.find_by(username: param[:username])

我知道我不应该直接从参数中读取,但我仍然认为代码不能生成任何 NoSQL 注入。我错了吗?

你的同事错了,如果他认为这是真的,应该制作一个有效的漏洞。

向 Rail 的 find_bywhere 方法提供 key/value 对的散列是使用这些方法的预期、安全和正确的方式。键和值在用于查询之前总是安全的。

有些问题 Rails 不会 保护您免受,例如,params[:username] 的值可能是一千兆字节的文本,一个File 对象,key/value 对的嵌套哈希等,但这本身并不是“注入”。任何可能导致查询含义发生变化的特殊字符均无效。