为Intranet Django项目共享`auth_user`和`django_session`表是否安全?

时间:2013-12-26 08:08:59

标签: django single-sign-on

我们有很多用Django编写的内部网项目。随着项目的发展,auth总是令人痛苦和重复。

E.g。用户需要登录三个内部系统:

http://192.168.x.x/proj1/

http://192.168.x.x/proj2/

http://192.168.x.x/proj3/

基本上他必须在三个系统上创建三个帐户。所以我想如果可以跨三个django项目共享MySQL表auth_userdjango_session(使用MySQL联合表引擎),可以共享登录会话和信息。因此,创建一次帐户并登录一个并使用所有三个系统。

安全吗?在实践中做过相似的人吗?

1 个答案:

答案 0 :(得分:2)

只要每个项目的维护者都知道这种架构,共享auth和会话表是一个非常可接受的解决方案。

需要注意的一些问题:

  • 每个项目都需要了解其他项目存储在会话中的数据,以免意外覆盖。如果您仅使用会话进行身份验证,则不会出现此问题。
  • messages framework无法按预期工作。同样,这可能不是您项目中的问题。
  • 在所有项目中使用相同的Django版本可能是个好主意。例如,默认情况下为Django 1.6 changed the way it stores sessions。用户模型也可能在不同版本之间发生变化。
  • 如果要使用Custom User Model,则需要在所有项目中使用相同的模型。如果您需要跨项目共享额外的配置文件数据,这可能是一个不错的选择。

由于所有三个项目都可以访问数据库,因此从安全角度来看,最好将它们视为单个项目/实体。有些数据可能会通过会话从一个项目泄漏到另一个项目,并暴露在不应该的地方。

此外,可能会出现一些安全问题:例如,如果两个项目无意中使用相同的变量名称来存储冲突数据,被一个项目视为安全但另一个项目不安全,则用户可能会注入被认为是安全的恶意数据。 / p>

但是如果你有一个由多个程序员维护的单个项目,这些事情可能会发生。所以,只要你确定这些不是你的项目的问题,你应该没问题。