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_paramあなたのモデルのとcreate_identifierは無関係だと思います。

于 2013-03-18T05:55:23.097 に答える