2011-01-11 1 views
2

J'utilise Rails 3, concevoir, cancan. J'ai défini les cookies comme spécifiques à un sous-domaine et j'utilise le sous-domaine avec le nom d'utilisateur comme clés d'authentification.Authentification avec cookie sous-domaine permet un accès facile à d'autres sous-domaines

à savoir

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

Alors, quand j'authentifie un utilisateur dans un sous-domaine particulier, l'utilisateur n'a pas accès à un autre sous-domaine. Si je viens d'éditer sa session cookie (firebug) et de changer le domaine du cookie (c'est-à-dire passer de foo.mydomain.com à fee.mydomain.com) l'utilisateur acquiert l'accès au nouveau sous-domaine.

Je me rends compte que je pourrais bloquer l'accès avec cancan, mais idéalement je voudrais limiter l'utilisateur par l'authentification. Il se sent en quelque sorte un peu plus sécurisé et il nécessite moins de configuration (quelques lignes de moins en capacité.rb).

Une idée n comment empêcher ce hack mort simple?

+0

J'ai eu un problème secondaire avec ceci. Si vous invitez un utilisateur d'un sous-domaine, puis ajustez le lien pour qu'il pointe vers un autre domaine, il enregistre avec succès l'utilisateur avec l'autre domaine (mauvais!). Avez-vous rencontré cela? – cjm2671

Répondre

1

J'ai fini par faire mon propre filtre avant sur mon contrôleur qui vérifie le sous-domaine et le compare aux sous-domaines sur lesquels l'utilisateur est autorisé à se connecter.

#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 

et dans mon contrôleur d'objet

#myobjects_contoller.rb 

before_filter: check_account_id 
before_filter: authenticate_user! 
.... 

Je ne sais pas si cela la façon la plus élégante, mais il fonctionne. Ce serait bien si il y avait un moyen de faire connaître aux sous-domaines autorisés. C'est peut-être une demande de fonctionnalité potentielle.

Questions connexes