【问题标题】:Authentication with subdomain cookie allows easy access to other subdomains使用子域 cookie 进行身份验证可以轻松访问其他子域
【发布时间】:2011-07-13 04:15:31
【问题描述】:

我正在使用 Rails 3,devise,cancan。我已将 cookie 设置为特定于子域​​,并使用子域和用户名作为身份验证密钥。

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

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

我意识到我可以使用 cancan 阻止访问,但理想情况下我想通过身份验证来限制用户。它在某种程度上感觉更安全,并且需要更少的配置(在能力.rb 中少了几行)。

知道如何防止这种死的简单黑客攻击吗?

【问题讨论】:

  • 我有一个次要问题。如果您从一个子域邀请用户,然后调整链接以指向另一个域,它会成功地将用户注册到另一个域(糟糕!)。你遇到过吗?

标签: cookies ruby-on-rails-3 devise session-cookies cancan


【解决方案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!
....

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

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2017-08-31
    • 1970-01-01
    • 2014-10-25
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多