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