2013-01-06 72 views
4

我正在创建多租户系统(第一次)。我稍微担心这个系统,因为应用程序的所有用户详细信息将保存在数据库中的同一个表中。当用户登录时,我打算设置一个$_SESSION变量,其中包含它们的clientid并使用它来访问他们的所有信息(DB中的所有信息将有clientid列)。php会话足够安全多租户系统

我认为这是用PHP处理多租户系统的唯一解决方案,使用MySQL。这足够安全吗?或者我应该为每个客户选择不同的数据库。我担心,如果客户可以将自己的“012”改为“45”,这意味着他们可以访问其他人的数据。

有没有更好的方法?或者解决方案是处理多租户系统中访问数据的唯一方法(PHP & MySQL)?

+3

用户不能更改他们自己的会话数据,除非您的代码允许他们这样做。如果你担心他们改变它,那么不要给他们这样做...... – Charles

+0

@Charles - 如果他正在做我认为他在做的事情,那么并不完全正确。他必须确保,如果客户被允许执行代码,他们不能直接操纵会话文件。当然,这更多的是服务器配置问题,或者可能是一个基础问题。 – Apropos

+0

@Charles'$ _SESSION ['clientid']'将被触及的唯一时间是用户登录和注销代码。 – cantaffordretail

回答

2

PHP通过使用会话跟踪谁是谁,然后使用cookie来识别服务器数据。

会话cookie是一样的东西

PHPSESSID=0f0f0f0f0f0f0f0f0f... (32 hexits, usually) 

会话数据存储在服务器端,因此用户将不能够(容易*)改变自己的clientid给别人。我很容易地说,因为用户可以尝试和brute-force their PHPSESSID value并获得对另一个服务器会话的访问权限(但这应该需要一个looong时间)。

也可以使用其他策略,例如XSS exploits来发现其他服务器会话。

您可以搜索StackOverflow的更多信息:

为了安全起见,请确保您不输出用户输入,恕不另行(通过使用HTMLPurifier或htmlspecialchars()),并在登录/注销或升级时呼叫session_regenerate_id()用户的特权。