Ruby on Rails - Когда использовать params.permit!и как его заменить - PullRequest
0 голосов
/ 17 сентября 2018

Я работаю над устаревшим приложением rails, и у контроллеров есть много экземпляров params.permit!. При запуске сканирования Бормана на нем params.permit! открывает приложение для уязвимостей массового назначения.

Мой вопрос - какой самый эффективный способ обойти это params.permit! уязвимость и заменить ее?

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Я предполагаю, что кто-то добавил params.permit!после обновления рельсов, чтобы не искать «сильные параметры» и правильно их настраивать.

Правильный способ исправить это - пройти через каждый контроллер и просмотреть, какие параметры вам нужны и какие разрешения вы хотите разрешить для каждого действия,а затем с помощью params.permit (без восклицательного знака) установить белый список для разрешенных параметров:

https://apidock.com/rails/ActionController/Parameters/permit

0 голосов
/ 29 октября 2018

Я также обнаружил, что использование метода to_unsafe_hash для отдельных вызовов параметров сработает и поможет обойти предупреждение Brakeman. Некоторая информация о методе здесь: https://apidock.com/rails/v4.2.7/ActionController/Parameters/to_unsafe_hash

0 голосов
/ 17 сентября 2018

params.permit! белые списки все атрибуты , приводящие к уязвимости массового назначения.Лучший способ обойти это - внести в белый список только необходимые атрибуты , например

params.permit(:attr1,:attr2..)

Еще лучше использовать requireс permit

Позволяет вам выбрать, какие атрибуты должны быть внесены в белый список для массового обновления и, таким образом, предотвратить случайное раскрытие того, что не должно быть выставлено.Предоставляет два метода для этой цели: требовать и разрешать.Первый используется для маркировки параметров по мере необходимости.Последний используется для установки параметра как разрешенного и ограничения, какие атрибуты должны быть разрешены для массового обновления.

params.require(:key).permit(:attr1, :attr2..)
...