4

HTTPS経由でApache、MySQL、およびPHPを使用しています。

機密情報を保存して、複数のユーザーで共有できるようにする必要があります。データベース (シークレット) と 2 つの php ファイルがある場合: (/var/www は Web ルートです)

/var/inc.php
/var/www/secret.php      

/var/inc.php には、32 文字の英数字の文字列である $enckey という名前の変数があります。その権限は読み取り専用に設定されています。

secret.php には、ユーザー名、パスワード、およびキー フィールドがあります。彼らのキー フィールド ($key) は、すべてのユーザーが知っている文字列です (ソルトの一部として使用しているため、各人が同じキーを持っています)。8 ~ 12 文字の英数字と特殊文字の文字列になります。

誰もが独自のユーザー名とパスワードを持ち、それらは MySQL ユーザー/パスワードでもあります。ユーザーがログインすると、ユーザー資格情報が最初に MySQL で検証されます。/var/inc.php には、データベースのユーザー名やパスワードはありません。

私の秘密のデータベースには、次のsecretようなテーブルがあります。

CREATE TABLE `secret` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(64) DEFAULT NULL,
    `data` text,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

次を使用してMySQLテーブルに情報を保存する場合:

AES_ENCRYPT('secret data', $enckey . $key)

を使用してデータを抽出します

AES_DECRYPT(`secret`.`data`, $enckey . $key)

MySQLdata列に保存されたデータを安全に保つために十分なことをしていますか? 私がやるべきことはもっとありますか?

更新: サイトへのアクセス権を与えられた人 (有効なユーザー名/パスワードを持つ人) は、すべての機密データにアクセスできます。目標は、第三者が何らかの方法でデータベースにアクセスできた場合に、データを取得できないようにすることです。

4

1 に答える 1