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
列に保存されたデータを安全に保つために十分なことをしていますか? 私がやるべきことはもっとありますか?
更新: サイトへのアクセス権を与えられた人 (有効なユーザー名/パスワードを持つ人) は、すべての機密データにアクセスできます。目標は、第三者が何らかの方法でデータベースにアクセスできた場合に、データを取得できないようにすることです。