Rails 3, как обезопасить контроллеры и URL-адреса

#url #controllers #protection

#url #контроллеры #защита

Вопрос:

Я вроде как новичок в rails, чего я хочу, так это защитить профиль пользователя

я имею в виду, что если пользователь 1 войдет в систему и перейдет к редактированию своего профиля, он может, но также, если он изменит URL для пользователя на # 2, они также могут изменить свою информацию

localhost: 3000/users /2/редактировать

Я немного заблудился, буду признателен за любую помощь или предложения хороших книг / блогов

Ответ №1:

В качестве части аутентификации добавьте переменную сеанса, session[:user_id] = User.Аутентифицироваться(параметры [:user][:username], параметры [:user][:password) (это общий шаблон, вам нужно добавить другой ресурс для аутентификации).

Затем добавьте функцию before_filter к вашему контроллеру и проверьте, соответствует ли session[:user_id] == параметрам [:id]. Посмотрите на это здесь: before_filter

Ответ №2:

Руководство по безопасности Rails, вероятно, является хорошим местом для начала

Ответ №3:

На всякий случай, если это кому-то пригодится, при тестировании моего приложения я столкнулся с тем, что, хотя пользователи, которые не вошли в систему, не могли получить доступ к ограниченному контенту, после входа в систему пользователь мог изменить URL на другой идентификатор пользователя, например.

/users/3 и тогда это показало бы домашнюю страницу этого пользователя. Таким образом, любой пользователь мог просматривать любого другого пользователя, чего я не хотел.

Чтобы обойти это, я изменил пользовательский контроллер для защиты от этого:

class UsersController < ApplicationController

#first call the correct_user function before allowing the show action to proceed

before_filter :correct_user, only: [:show]

...

def show
#do whatever here
end

...

private

def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end