0

У меня есть следующий код, который создается объектом (rmodal).Как использовать полиморфные ассоциации в защищенном виде

Это класс имеет полиморфные ассоциации с несколькими другими классами (cmodal, umodal, ccmodal, pmodal, emodal)

Создание rmodal имеет форму со скрытым полем, которые включают его тип (cmodal, umodal и т. д.) и его идентификационный номер (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]) в имя класса, но в этом случае я считаю его ложным.

Смежные вопросы