Как остановить пользовательскую форму добавления форм в поле? - PullRequest
2 голосов
/ 25 января 2012

У меня есть форма, которая позволяет пользователю обновлять информацию в своем профиле, но я хотел бы предотвратить изменение какой-либо информации.Я также хотел бы сохранить мой код контроллера очень простым.В действии обновления моего Users Controller у меня есть следующий код:

def update
  @user = Users.find params[:id]

  if @user.update_attributes(params[:user])
    flash[:notice] = 'Update successful.'
    redirect_to user_path(@user)
  else
    render :action => :edit
  end
end

Это очень чисто и просто, и мне это нравится.Однако мне не нравится то, что пользователь может добавить поле в форму с тем же именем, что и атрибут, и использовать его для изменения запрещенных атрибутов.Есть ли простой способ сделать это, или мне нужно разработать способ сделать это самому?

Один из способов, который я рассматривал, заключался в генерации хеш-значения с использованием аутентификации сообщений на основе хешкод , всех имен элементов формы.Этот код доступа к сообщению будет скрытым значением в форме.Затем, после отправки формы, я снова вычисляю код доступа к сообщению (MAC), используя имена параметров ключей Hash.Если два MAC-адреса различны или первый MAC-адрес отсутствует в параметре Hash, я бы выдал ошибку.Я бы предпочел не тратить время на реализацию этого, если бы уже было простое решение.

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 января 2012

Rails предотвратит массовое назначение, если вы используете attr_protected :protectedcolumn (черный список) или attr_accessible :safecolumn (белый список) в вашей модели.Дополнительную информацию по этой теме можно найти в Руководстве по безопасности Ruby on Rails (раздел 6.1)

1 голос
/ 25 января 2012

В вашей модели вы можете использовать attr_protected или attr_accessible , чтобы задавать атрибуты черного или белого списка при настройке посредством массового назначения (например, при отправке формы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...