0

我有以下代碼,其中創建了一個對象(rmodal)。如何以安全的方式使用多態關聯

即類與其他一些類(cmodalumodalccmodalpmodalemodal

rmodal創建具有帶有隱藏字段,其包括其類型(cmodalumodal的形式的多態關聯等)及其ID(r_id

以下代碼是否被充分保護?司閘員目前指出,這條線可能會導致遠程代碼exectuion

@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

由於您將輸入限制爲已知值的白名單,因此我會認爲這是安全的。 Brakeman目前不能說你正在使用警戒聲明,所以它會警告將用戶輸入(params[:r])轉換爲類名稱,但在這種情況下,我會認爲它是誤報。