1

我的控制器使用以下方法找到用户:

@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 注入一无所知。

4

1 回答 1

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_paramand是无关紧要的。create_identifier

于 2013-03-18T05:55:23.097 回答