在多个子域名共享Django会话的缺点

4
我使用站点框架构建了一个Django网站,有四个不同子域名的站点,我们称之为one.mydomain.com; two.mydomain.com ...等等。
其中三个站点是产品站点,一个是商店。我想要在这些站点之间共享会话,这样用户在从任何产品站点转到商店时就不必再次登录。我意识到我可以使用cas来实现单一登录,但我不认为那符合我的所有目的。
我阅读了this postthis post关于跨子域共享会话的文章,共识似乎是这样做是不好的。
在我的情况下,我希望用户能够在一个子域名上将商品添加到购物车中,然后进入购物车结账。我无法想象在不共享会话的情况下如何实现这一点。用户还应该能够从另一个产品站点添加到其购物车中,并在结账时看到来自one.mydomain.com、two.mydomain.com等的产品。
所以我的问题是,除了潜在的冲突之外,为什么共享会话是一个坏主意?假设我确保唯一发生(并且应该发生)的冲突是用户登录信息。
我的设置具有所有站点共享的SECRET_KEY和SESSION_COOKIE_DOMAIN='.mydomain.com'。我是否遗漏了严重的安全漏洞?
谢谢。/w
2个回答

1
在某些情况下,我认为这是一个安全漏洞,特别是当你无法控制特定域名的所有子域时。例如,你有一个.mydomain.com和two.mydomain.com,但浏览器会将你的cookie也给一个名为bad.mydomain.com的网站,因为你的设置中有SESSION_COOKIE_DOMAIN = '.mydomain.com'。
另一个潜在的漏洞可能会发生在你将开发环境作为其中一个子域(例如dev.mydomain.com)的情况下。如果是这种情况,你将无法隔离。
就我所研究的这个主题而言,最糟糕的情况似乎会将你的cookie泄露给恶意子域,因此潜在地会有人使用此cookie劫持真实会话。
目前,我正在进一步研究如何更好地隔离由Django控制的不同子域,但似乎没有真正的方法来做到这一点,除了重写SessionMiddleware。

0
从我所读的许多资料来看,共享会话似乎是一个不好的想法,如果您尝试在站点之间共享会话,可能会导致一些非常难以追踪的错误。据我所知,通常最好使事物尽可能无状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接