Rails 3, как обезопасить и защитить контроллеры и URL - PullRequest
1 голос
/ 09 июня 2011

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

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

локальный: 3000 / пользователей / 2 / редактировать

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

Ответы [ 3 ]

1 голос
/ 09 июня 2011

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

1 голос
/ 09 июня 2011

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

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

0 голосов
/ 27 июня 2013

На всякий случай, если это кому-то пригодится, то, с чем я столкнулся при тестировании моего приложения, было то, что, хотя пользователи, которые не вошли в систему, не могли получить доступ к ограниченному контенту, после того как пользователь вошел в систему, они могли изменить 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

...