【问题标题】:Django: Is there a safe and robust way to allow account-holders to have separate domains on your app?Django:有没有一种安全可靠的方法可以让帐户持有人在您的应用程序上拥有单独的域?
【发布时间】:2011-01-15 11:55:49
【问题描述】:

如果我希望我的帐户持有人能够拥有自己的子域,甚至完全拥有自己的域。使用 NGINX 作为我的代理服务器,我是否应该在我的 NGINX conf 中为每个域创建域并让我的客户将他们的域指向那里,或者有什么原因会导致这种情况变坏?另外,如果我这样做,我如何将特定帐户(Django DB 中的帐户)信息与请求(即,来自 www.spamfoosaccount.com 的请求到我的服务器)一起传递,所以我将请求代理回 Apache,但是如何我的应用程序是否知道它来自 spamfoo 的帐户,除非我查看 request.HTTP_HOST(这可能是最好的方法,但直到我问我才知道)。提前致谢。

【问题讨论】:

    标签: django web-applications multiple-domains


    【解决方案1】:

    要知道请求来自哪个域,您必须使用request.META["HTTP_HOST"]

    但是,不要依赖此值进行身份验证,它很容易被伪造。应该使用django.contrib.session 以通常的方式进行身份验证。来自特定域/子域的请求不应具有更多特权/权限,即使请求包含经过身份验证的会话。权限应该授予用户/用户组,而不是域。

    请注意,浏览器会话不能跨二级域(例如,来自 foo.com 的会话 cookie 不会发送到 bar.com),但是它可以是所有子域的 *.foo.com cookie(如果您明确设置它)。

    让您的用户将他们的 DNS 记录指向您服务器的 IP,让 NGINX 将基于域的请求路由到您的后端,并在 Django 中进行正常的身份验证。

    你的问题:

    我的应用程序如何知道它 来自 spamfoo 的帐户

    我不知道您的应用程序的具体情况,但请求来自何处并不重要,重要的是发出请求的人(例如经过身份验证的用户)。您应该有一个模型/字段将您的用户链接到他们各自的域。当用户仅链接到一个域时,应用程序应假定用户来自该域。当用户连接到多个域时,您可以查看request.META["HTTP_HOST"]。如果此值与任何域匹配,则用户链接到,没关系,该值可能是伪造的,但仍然是链接到该域的用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      相关资源
      最近更新 更多