Я только начинаю с Rails, поэтому я использую Brakeman, чтобы узнать о потенциальных уязвимостях в моем коде для новичков. Он бросает высокого доверия «Dynamic Рендер Path» предупреждение о следующем коде в моем show.js.erb
файле:Rails Предупреждение Brakeman: Динамический Render Path ложный сигнал?
$('#media-fragment').html('<%= escape_javascript(render(params[:partial])) %>');
я действительно ожидал, это было проблемой, так что не удивительно, там. Таким образом, я изменил его к следующему:
# controller:
def show
if legal_partial?
@allowed_partial = params[:partial]
else
raise StandardError, "unexpected partial request: #{params[:partial]}"
end
end
private
def legal_partial?
%w(screenshots video updates).include? params[:partial]
end
# ...
# show.js.erb
$('#media-fragment').html('<%= escape_javascript(render(@allowed_partial)) %>');
Хотя я считаю, что код теперь безопасен, кондуктор еще недоволен этим. Есть ли более идиоматический способ управления рендерингом частичного на основе пользовательского ввода?
Я не могу показаться, чтобы получить состояние охраны для работы модели атрибутов. У меня есть метод на моей модели: 'def sanitized_partial_path; если ["foo", "bar"]. include? (атрибут); "Путь/к/# {атрибут}"; end; 'и он все же дает ложное положительное значение. – Nick
@Nick Brakeman не собирается смотреть содержимое 'sanitized_partial_path' (хотя в будущем Brakeman Pro будет). Пример моего ответа работает из-за назначения переменной экземпляра в действии контроллера, которое используется позже в представлении. – Justin