SQL 注入 Rails 4 期

SQL injections in Rails 4 issue

我正在尝试了解 SQL 注入并尝试实现这些注入,但是当我将这段代码放入我的控制器时:

params[:username] = "johndoe') OR admin = 't' --"
@user_query = User.find(:first, :conditions => "username = '#{params[:username]}'")

我收到以下错误:

Couldn't find all Users with 'id': (first, {:conditions=>"username = 'johndoe') OR admin = 't' --'"}) (found 0 results, but was looking for 2)

我已经使用用户名 "johndoe" 创建了一个用户模型,但我仍然没有得到正确的响应。顺便说一句,我正在使用 Rails 4.

您使用的是古老的 Rails 语法。不使用

find(:first, :condition => <condition>) ...

改为使用

User.where(<condtion>).first

find 接受要查找记录的 ID 列表。您为其指定了一个 ID :first 和一个 ID condition: ...,它们不会匹配任何记录。

User.where(attr1: value, attr2: value2)

或单件商品

User.find_by(attr1: value, attr2: value)

请记住,在执行所有这些操作时,通过在查询方法的末尾添加 "to_sql" 来检查实际的 sql 语句是什么很有价值(据我所知, find_by 只做一个 LIMIT by 1)