我的控制器找到一个用户:
@user = User.find_by_identifier!(params[:id])
在我的用户模型中,我有
class User < ActiveRecord::Base
def to_param
identifier
end
private
def create_identifier
SecureRandom.urlsafe_base64(9)
end
end
问题:从SQL注入点可以安全吗?怎么这样,因为尽管阅读了各种文章,我仍然不知道SQL注入。
答案 0 :(得分:2)
在我自己的控制台中进行快速实验表明find_by_identifier!
可以安全地防止SQL注入。
irb(main):005:0> User.find_by_email! "i am sneaky '; drop table woot;"
User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'derp ''; drop table woot;' LIMIT 1
请注意生成的SQL查询如何转义恶意单引号。
我认为模型中的to_param
和create_identifier
无关紧要。