【发布时间】:2011-10-15 01:13:54
【问题描述】:
假设我有一个用户列表页面,您可以按不同的列进行排序,当单击“电子邮件”时,它将通过 sort_by=email sort_direction=asc 或 desc
sort_by = "email" # really params[:sort_by]
sort_direction = "asc" # really params[:sort_direction]
User.order("#{sort_by} #{sort_direction}")
# SELECT "users".* FROM "users" ORDER BY email asc
这样可以按预期工作,但是如果我们更改 sort_by
sort_by = "email; DELETE from users; --"
User.order("#{sort_by} #{sort_direction}")
# SELECT "users".* FROM "users" ORDER BY email; DELETE from users; -- asc
现在我们没有更多用户了:(
我可以手动建立一个有效 sort_by 的白名单并将 params[:sort_by] 与之进行比较,但希望有一些内置的方法来处理这种事情
【问题讨论】:
标签: ruby-on-rails-3 ruby-on-rails-3.1 sql-injection