4

マルチテナントシステムを作成しています(初めて)。アプリのすべてのユーザーの詳細がDB内の同じテーブルに保持されるため、このシステムについて少し心配しています。ユーザーがログインしたら、ユーザー$_SESSIONを含む変数を設定し、clientidこれを使用してすべての情報にアクセスする予定です(DB内のすべての情報に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 に答える