PHP会话对于多租户系统是否足够安全?

4
我正在创建一个多租户系统(第一次)。我对这个系统有点担心,因为应用程序的所有用户详细信息都将保存在同一个表中的数据库中。当用户登录时,我计划设置一个包含他们的客户ID的$_SESSION变量,并使用此变量访问他们的所有信息(所有信息在数据库中都具有clientid列)。
我认为这是使用PHP和MySQL处理多租户系统的唯一解决方案。这种方法安全吗?或者我应该选择为每个客户端分别建立不同的数据库。我担心如果客户可以更改他们的$_SESSION ['clientid'] ,例如从“12”更改为“45”,那么他们就可以访问其他人的数据。
是否有更好的方法?或者在多租户系统中,访问数据(PHP和MySQL)的解决方案是唯一的?

3
除非您的代码允许用户更改自己的会话数据,否则他们不能更改它。如果您担心他们会更改它,请不要为他们提供这样的途径... - Charles
@Charles - 不完全正确,如果他正在做我认为他在做的事情。他必须确保,如果允许客户端执行代码,他们不能直接操纵会话文件。当然,这更多是服务器配置问题,或者可能是基目录问题。 - Apropos
@Charles,只有在用户登录和注销代码时才会涉及到“$_SESSION ['clientid']”。 - cantaffordavan
1
只要它们无法执行任意代码并允许在您的服务器上进行文件操作,会话就是完全安全的。 - Apropos
2
如果“只要用户不能随意执行代码”是真的,那么你需要担心的不仅仅是会话安全问题。 - Mike B
@MikeB 哈哈,是的。我编写任何代码的第一层防御是确保用户无法任意执行代码。 - cantaffordavan
1个回答

2

PHP通过使用会话来跟踪用户身份,而会话又使用cookie来标识服务器数据。

会话cookie类似于

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

会话数据存储在服务器端,因此用户将无法轻易更改其clientid为其他人。我说“轻易”,是因为用户可以尝试使用暴力破解PHPSESSID值并访问另一个服务器会话(但这需要很长时间)。
还可以使用其他策略,如XSS攻击来发现其他服务器会话。
您可以在StackOverflow上搜索更多信息: 为了安全起见,请确保在未经过净化处理之前不输出用户输入(可以使用HTMLPurifier或htmlspecialchars()),并在登录/注销或提升用户权限时调用session_regenerate_id()

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