2017-02-21 4 views
0

В документации на направляющие для permit указано, что оно «полезно для ограничения того, какие атрибуты должны быть разрешены для массового обновления»Rails - полезность params.permit() вне назначения массы?

Есть ли еще какая-нибудь утилита? Скажите, безопасность?

ответ

2

Весь смысл наличия .permit из соображений безопасности. Начиная с Rails 3.0, Rails использует так называемый белый список, когда речь идет о массовом присвоении параметров. По сути, это связано с тем, что по умолчанию все параметры не разрешены, и вы должны вручную разрешить присвоение параметров параметрам.

Это не позволяет хакеру использовать определенные параметры, т. Е. Если у вас есть параметр администратора, который проверяет, присутствует ли администратор и который также принимает логическое значение, хакер может просто писать параметры, admin = true и потенциально получить доступ к способности вашего приложения создавать, обновлять или удалять определенные компоненты в ущерб.

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

+0

Но как это помогает? Если вы не * используете * параметр admin, то как он попадет в вашу базу данных в любом случае? –

+1

Сильные параметры - это предотвратить эту гипотетическую ситуацию, в которой вы используете что-то вроде параметра admin. Сильные параметры не обязательно должны использоваться в 100% случаев, но Rails заставляет вас по умолчанию использовать их в качестве наилучшей практики на всякий случай, если у вас есть параметр, которым могут манипулировать хакеры. Существует множество других способов взлома, таких как SQL-инъекция, межсайтовый скриптинг, но наличие сильных параметров, таких как '.permit', не позволяет взломать управление использованием параметров. – the12