Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cookies 使用子域cookie进行身份验证可以轻松访问其他子域_Cookies_Ruby On Rails 3_Devise_Session Cookies_Cancan - Fatal编程技术网

Cookies 使用子域cookie进行身份验证可以轻松访问其他子域

Cookies 使用子域cookie进行身份验证可以轻松访问其他子域,cookies,ruby-on-rails-3,devise,session-cookies,cancan,Cookies,Ruby On Rails 3,Devise,Session Cookies,Cancan,我正在使用Rails 3,Desive,cancan。我已将cookie设置为特定于子域的,并将子域与用户名一起用作身份验证密钥 i、 e 因此,当我对特定子域中的用户进行身份验证时,该用户无权访问任何其他子域。如果我只是编辑他的cookie会话(firebug)并更改cookie的域(即从foo.mydomain.com更改为fee.mydomain.com),用户将获得对新子域的访问权 我意识到我可以用cancan阻止访问,但理想情况下我希望通过身份验证来限制用户。不知何故,它感觉更安全,需

我正在使用Rails 3,Desive,cancan。我已将cookie设置为特定于子域的,并将子域与用户名一起用作身份验证密钥

i、 e

因此,当我对特定子域中的用户进行身份验证时,该用户无权访问任何其他子域。如果我只是编辑他的cookie会话(firebug)并更改cookie的域(即从foo.mydomain.com更改为fee.mydomain.com),用户将获得对新子域的访问权

我意识到我可以用cancan阻止访问,但理想情况下我希望通过身份验证来限制用户。不知何故,它感觉更安全,需要更少的配置(在ability.rb中减少几行)


你知道如何防止这种死气沉沉的简单黑客行为吗?

我最终在我的控制器上做了我自己的before filter,检查子域并将其与允许用户登录的子域进行比较

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

不确定这是否是最优雅的方式,但它确实有效。如果有办法让Desive知道允许的子域,那就太好了。这可能是一个潜在的功能请求。

我遇到了第二个问题。如果您从一个子域邀请一个用户,然后调整链接以指向另一个域,则会成功地将该用户注册到另一个域(错误!)。你遇到过这个吗?
#myobjects_contoller.rb

before_filter: check_account_id
before_filter: authenticate_user!
....