Недавно я побежал Brakeman gem против моего приложения, и один из его предупреждений был о переадресации линии в моем контроллере:Является ли строка, интерполирующая сообщение redirect_to уведомлением о безопасности?
Confidence: High
Warning type: Redirect
Message: Possible unprotected redirect near line xx
В этой строке в моем контроллере, мое редирект уведомительного сообщение содержит имя объекта закачанного пользователь:
def update
parent_klass = params[:parent_type].constantize
@entity = parent_klass.find params[:parent_id]
authorize! :update, @entity
entity_param_key = params[:parent_type].downcase.to_sym
@entity.update_attributes params[entity_param_key]
cache_path = begin
if parent_klass == Clinic
clinic_path(@entity)
else
specialist_path(@entity)
end
end
expire_fragment cache_path
redirect_to @entity, :notice => "Successfully updated #{@entity.name}."
end
в этом контроллере @entity.name
является значением формы, которая определяется пользователем, то есть кто-то в теории может попытаться поставить вредоносный код в это поле. Однако я не уверен, что использование этого параметра для создания уведомления представляет собой угрозу безопасности.
сообщения Флэш-уведомление получить представлен в виде, как таковой (в Haml):
#body.container
.row
#content.span12
#container
- flash.each do |type, msg|
.alert.alert-success= msg
= yield
Является ли эта модель управления риском для безопасности, и если да, то как я могу предотвратить его угрозу безопасности в то же время сохраняя индивидуальное уведомление?
Зависит от того, что вы делаете с этим флэш-сообщением после перенаправления, не так ли? –
@PhilipHallstrom Я просто добавил код вида.Это довольно стандартная визуализация сообщения с уведомлением с использованием bootstrap 2 с некоторым модифицированным CSS. – Kelseydh
HAML автоматически удаляет результат. Если вы использовали '! =' Или имели некоторый материал типа eval, это может быть проблемой, но, как есть, кажется прекрасным. Попробуйте положить что-то противное в себя и посмотреть, что произойдет. –