4

我正在创建一个多租户系统(第一次)。我有点担心这个系统,因为应用程序的所有用户详细信息都将保存在数据库中的同一个表中。当用户登录时,我计划设置一个$_SESSION包含他们的变量clientid并使用它来访问他们的所有信息(数据库中的所有信息都将有clientid列)。

我认为这是使用 PHP 和 MySQL 处理多租户系统的唯一解决方案。这足够安全吗?或者我应该为每个客户选择单独的数据库。我担心如果客户可以将他们的$_SESSION['clientid']发言权从“12”更改为“45”,这意味着他们将可以访问其他人的数据。

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

4

1 回答 1

2

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

会话 cookie 类似于

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

会话数据存储在服务器端,因此用户将无法(轻松*)将其更改clientid为其他人。我说的很简单,因为用户可以尝试暴力破解他们的 PHPSESSID 值并获得对另一个服务器会话的访问权限(但这需要很长时间)。

也可以使用其他策略(例如XSS 漏洞利用)来发现其他服务器会话。

您可以搜索 StackOverflow 以获取更多信息:

为了安全起见,请确保在没有事先清理的情况下(通过使用 HTMLPurifier 或 )不输出用户输入,并在您登录/注销或提升用户权限时htmlspecialchars()调用。session_regenerate_id()

于 2013-01-06T04:26:47.137 回答