我有一个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吗?
这不是一个错误,5.2.2更新以删除SQL注入问题
SELECT `posts`.* FROM `posts` WHERE (users = '[]')
如果您观察到这个查询,我们会遇到SQL注入问题,也就是说,如果您传递一些查询而不是值,那么它就会传递。太危险了。您可以使用的以下代码来检索基于where条件的数组对象的数据。
ModelName.where('users IN (?)', [array of elements] )