Несколько вопросов о безопасности в Rails 5 - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть ряд проблем с безопасностью моего текущего приложения, и мне интересно, оставляю ли я себя открытым для злоупотреблений, в следующих областях.

a). Мой основной метод контроля доступа - это поддержкаcurrent_user, current_company метод current_project в контроллере моего приложения.Эти методы возвращают объект на основе сохраненных сеансовых ключей, установленных при входе пользователя в систему, и очищаются при выходе из него.Т.е., если я хочу узнать что-то о текущем пользователе, я могу вызвать «current_user.role» или, если я хочу узнать, принадлежит ли ему учетная запись, которую пытается изменить пользователь, я проверяю, связан ли идентификатор связанной учетной записи, который запрашивается вURL действительно принадлежит этому пользователю, по сути, следующим образом

в контроллере учетных записей

def account_info
  redirect_to login_path if !user.logged_in
  account_id=params[:account_id]
  @account = Account.find(account_id)
  unless account_belongs_to_user(account_id)
    redirect_to unauthorized_path
  end

end

В моем контроллере приложений, когда пользователь первоначально аутентифицирован, я делаю что-тонапример:

session[:current_user_id] = user.id

и очистите этот сеансовый ключ при выходе пользователя из системы.

Затем, когда запрашивается учетная запись и вызывается account_belongs_to_user, контроллер приложения обрабатывает его более или менее так, какэто:

def account_belongs_to_user(account_id)
  account = Account.find(account_id)
  return account.user_id==session[:current_user_id]
end       

Так что я думаю, что моя схема безопасности в конечном счете зависит от того, являются ли данные сеанса безопасными и нетривиальными подделками.

b) При рендеринге страниц я иногда пропускаю объекты, имеющие чувствительныйданные для моих страниц erb для генерации текста страницы.

Например, я мог бы передать объект "компания" (ActiveRecord) в представление для создания экрана счета.Но объект компании, переданный как @company, содержит много конфиденциальных данных, таких как ключи доступа и тому подобное.Не будучи полностью осведомленным о внутренностях, если я специально не добавлю что-то вроде:

<%= @company.access_token %> 

на мою веб-страницу, могу ли я быть уверен, что атрибуты @company не будут каким-то образом переданыв браузер, если я специально не прошу их визуализировать на странице?

Это, очевидно, проблема при использовании рельсов для обработки данных, например, одностраничных приложений AngularJS, поскольку все, что я передаю для Angular для рендерингаЯ полагаю, что страница доступна злоумышленнику, даже если не на самой странице, но я надеюсь, что это не относится к страницам, созданным на стороне сервера с помощью рельсов.

Это может быть наивный вопрос, носпасибо, я просто хочу быть уверенным в том, что я делаю, прежде чем начать распространять секреты повсюду.

1 Ответ

0 голосов
/ 03 декабря 2018

поставить аутентификацию для токена с помощью обратного вызова active_record https://guides.rubyonrails.org/active_record_callbacks.html

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