2

ファイルの 1 つのディレクトリ (アプリケーションの 1 つのインスタンス) を複数の可能性の範囲から 1 つのデータベースに接続する、適切で安全な方法を見つけようとしています。以前は、顧客ごとに 1 つのファイル セットと 1 つのデータベースがあり、そのファイル セットはデータベースに直接リンクするように構成されていました。これは機能しますが、すべての顧客に対してアプリケーションの標準化されたバージョンを維持することが難しくなっています。誰もが最新のアップデートを確実に入手できるようにします。

私がそれに取り組むことを考えていた 1 つの方法は、ログイン プロセスに使用される一意の汎用データベースを用意することでした。そのデータベース内には、ユーザーの特定のデータベースの名前を含むフィールドがあり、セッションに保存されます。アプリケーションにログインすると、セッションを参照してデータベースの名前を取得し、それに直接接続します。

私はそのアプローチがうまくいくと確信していますが、セキュリティ上の問題があるのではないかと心配しています. これを処理する方法に関するアドバイスはありますか?

4

2 に答える 2

1

顧客ごとに知っておく必要があるのは、データベース接続のユーザー、パス、データベース名、およびホスト名だけです。これらを顧客ごとに 1 つの構成ファイルに保存し、顧客に応じて名前を付けます。

/path/to/configs/customer1.ini
/path/to/configs/customer2.ini
/path/to/configs/customer3.ini

次に、アプリは、VHOST に設定された環境変数に基づいて、または $_SERVER['HTTP_HOST'] の値に基づいて、ロードする構成ファイルを選択します。

たとえば、index.php には次のようなものがあります。

if (!preg_match('/pattern to ensure valid hostname/', $_SERVER['HTTP_HOST'])) {
    header('HTTP/1.1 403 Forbidden');
    exit;
}
$config = '/path/to/configs/' . $_SERVER['HTTP_HOST'] . '.ini';
if (!file_exists($config)) {
    header('HTTP/1.1 404 Not Found');
    exit;
}
require_once $config;

次に作成します。

/path/to/configs/customer.com.ini

なので:

dbname = whatever
user = whatever
pass = whatever
dbhost = whatever

(ええと、申し訳ありませんが、ini ファイルを require_once する必要はありませんが、アイデアはわかります...)

于 2012-06-06T18:18:12.713 に答える