ActiveRecord-当字段是序列化的空数组时的#where方法

时间:2018-12-06 09:02:56

标签: mysql ruby-on-rails activerecord

我有一个ActiveRecord查询:

Post.where(users: [])

在Rails 5.1.1中,结果为:

SELECT `posts`.* FROM `posts` WHERE (users = '[]')

但是在Rails 5.2.2中,结果为:

SELECT `posts`.* FROM `posts` WHERE 1=0

有人知道这是Rails 5.2中预期的行为还是bug?

1 个答案:

答案 0 :(得分:1)

这不是bug,已更新5.2.2以消除SQL注入问题。

const string pKey = "-----key-----" 
byte[] publicKeyBytes = Convert.FromBase64String(pKey);            
var stream = new MemoryStream(publicKeyBytes);
Asn1Object asn1Object = Asn1Object.FromStream(stream);

如果您观察到此查询,我们将遇到一个SQL注入问题,即如果您传递某个查询而不是值,那么它将通过。太危险了您可以使用以下代码根据具有where条件的数组对象检索数据。

SELECT `posts`.* FROM `posts` WHERE (users = '[]')