我正在使用Rails 3,设计,cancan。我已将cookie设置为特定于子域,并使用子域和用户名作为身份验证密钥。
即
devise :authentication_keys => [:username, :subdomain]
因此,当我对特定子域中的用户进行身份验证时,用户无权访问任何其他子域。如果我只是编辑他的cookie会话(firebug)并更改cookie的域(即从foo.mydomain.com更改为fee.mydomain.com),则用户将获得对新子域的访问权限。
我意识到我可以使用cancan阻止访问,但理想情况下我想通过身份验证来限制用户。它在某种程度上感觉更安全,并且需要更少的配置(在能力中减少几行.rb)。
任何想法如何防止这个死的简单黑客?
答案 0 :(得分: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!
....
不确定这是否是最优雅的方式,但确实有效。如果有一种方法让设计知道允许的子域名,那将是很好的。也许这是一个潜在的功能要求。