0

オブジェクト(rmodal)を作成する次のコードがあります。

つまり、クラスには他のいくつかのクラス ( cmodalumodalccmodal、)とのポリモーフィックな関連付けがありますpmodalemodal

の作成には、タイプ ( 、など) と ID ( )rmodalを含む非表示フィールドを持つフォームがありますcmodalumodalr_id

次のコードは十分に保護されていますか? Brakeman は現在、この行によってリモート コードが実行される可能性があると指摘しています。

 @r_type = params[:r].delete :r_type

 if (%w(cmodal umodal ccmodal pmodal emodal).include? @r_type)

      @rmodal = @r_type.classify.constantize.find(@r_id) rescue nil

私はr_typeそれが許容できる選択肢の1つであることを確認しているので、それで問題ないと推測しています。

これはこれを行う正しい方法であり、十分に安全ですか?

4

1 に答える 1

1

入力を既知の値のホワイトリストに制限しているため、これは安全だと思います。Brakeman は現在、ガード ステートメントを使用していることを認識できないため、ユーザー入力 ( params[:r]) をクラス名に変換することについて警告しますが、この場合は誤検知と見なします。

于 2013-07-09T16:47:55.497 に答える