2011-01-11 78 views
2

我正在使用Rails 3,設計,康康。我已將cookie設置爲子域特定,並將子域與用戶名一起用作認證密鑰。使用子域Cookie驗證可以輕鬆訪問其他子域

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

所以,當我在一個特定子域驗證用戶的用戶沒有訪問任何其他子域。如果我只編輯他的cookie會話(firebug)並更改cookie的域名(即從foo.mydomain.com更改爲fee.mydomain.com),則用戶將獲得對新子域的訪問權限。

我意識到我可以用cancan阻止訪問,但理想情況下我想限制用戶通過身份驗證。它以某種方式感覺更安全一點,它需要更少的配置(在ability.rb中少了幾行)。

任何想法ñ如何防止這種死亡簡單的黑客?

+0

我有這個第二個問題。如果您邀請某個子域中的用戶,然後調整該鏈接以指向另一個域,則該用戶將成功註冊到其他域的用戶(不好!)。你有沒有遇到過這個? – cjm2671 2011-10-24 20:56:24

回答

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! 
.... 

不知道這是最優雅的方式,但它確實工作。如果有辦法讓設計人員知道允許的子域名,這將是很好的。也許這是一個潛在的功能要求。