Аутентификация с использованием cookie субдомена позволяет легко получить доступ к другим субдоменам - PullRequest
2 голосов
/ 11 января 2011

Я использую Rails 3, devise, cancan.Я установил файлы cookie для конкретного субдомена и использую субдомен вместе с именем пользователя в качестве ключей аутентификации.

т.е.

devise :authentication_keys => [:username, :subdomain]

Поэтому, когда я аутентифицирую пользователя в определенном субдомене, пользователь делаетне иметь доступа к любому другому поддомену.Если я просто отредактирую его сеанс файлов cookie (firebug) и изменим домен файла cookie (т. Е. Изменим с foo.mydomain.com на fee.mydomain.com), пользователь получит доступ к новому поддомену.

Я понимаю, что могу заблокировать доступ с помощью cancan, но в идеале я хотел бы ограничить пользователя с помощью аутентификации.Он почему-то чувствует себя немного более безопасным и требует меньше настроек (на несколько меньше строк в Способности. Rb).

Есть идеи, как предотвратить этот простой хак?

1 Ответ

1 голос
/ 17 января 2011

В итоге я выполнил свой собственный фильтр before на моем контроллере, который проверяет поддомен и сравнивает его с поддоменами, на которые пользователю разрешено входить.

#application_controller.rb
def check_account_id

    account ||= Account.find(current_user.account_id)

    account.domains.each do |domain|

       if domain.name == request.subdomain
         return true
       end
    end

    flash[:error] = "You must be logged in to access this subdomain" 

    sign_out current_user
    redirect_to new_user_session_path 
end

и в моем контроллере объектов

#myobjects_contoller.rb

before_filter: check_account_id
before_filter: authenticate_user!
....

Не уверен, что это самый элегантный способ, но он работает.Хотя было бы неплохо, если бы был способ сообщить devise о разрешенных поддоменах.Возможно, это потенциальный запрос.

...