Аутентификация с помощью файла cookie субдомена позволяет легко получить доступ к другим субдоменам.

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

i.e.

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

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

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

Любая идея, как предотвратить этот мертвый простой взлом?


person Dimitris    schedule 11.01.2011    source источник
comment
У меня была вторичная проблема с этим. Если вы пригласите пользователя из одного поддомена, а затем настроите ссылку, чтобы она указывала на другой домен, он успешно зарегистрирует пользователя в другом домене (плохо!). Вы сталкивались с этим?   -  person cjm2671    schedule 25.10.2011


Ответы (1)


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

#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 о разрешенных субдоменах. Возможно, это потенциальный запрос функции.

person Dimitris    schedule 17.01.2011