データベースのユーザ、パスワードをファイルに書いている場合ありませんか?
こんな問題ありますよね?
- 誤ってコミットしてパスワードがバレバレかつ履歴に残ってしまった!
- 共有サーバでsymlink攻撃されて、他のユーザから見られて漏洩、攻撃された!
- 一部の人にしか、ユーザ名、パスワードなど重要な情報を教えたくない
対策を調べてまとめました。
良い方法ありましたら、教えて下さい!
別ファイルに保存して、読み込む
<?php
$db_password = system('cat /somewhere/db_passwd_file');
注意) セーフモード が有効な場合、 safe_mode_exec_dirの中にある実行プログラムのみ実行可能です。
上記パスワードが書かれたファイル読まれたら終わりじゃん! というのはあります。
Wordpress の wp-config.php のように自動でファイルの場所を決め打ちで狙われない程度には役に立つかも?
環境変数に書く
実行ユーザのシェルの環境変数にパスワードを書いて、プログラム内で環境変数を読み込むという方法です。
Apacheの環境変数に書く
Apacheの環境変数の場合,
(apache.conf|httpd.conf) or .htaccess に以下を書く
SetEnv DB_PASSWORD pasuwa-do
.htaccess は特に公開ディレクトリでは危険すぎるので、現実的ではないと思います。
プログラム側でApache環境変数を読む: PHPの場合
$db_password = apache_getenv('DB_PASSWORD');
.htaccessは現実的でない気がするので、apacheの環境変数を設定できる権限がないとできません。
共有サーバでできるところは、おそらくないでしょう。
シェル変数に書く
以下、全くの推測です。試してもいません。
どのようにシェル変数に書くかは、Webサーバの実行ユーザやsuEXECの設定による?
ユーザが、 apache なら apache ユーザのシェルに書く?
$db_password = getenv('PASSWORD');
$db_password2 = @$_ENV['PASSWORD'];
共有サーバで、自分のユーザで実行している場合は、自分のシェル変数を設定すると、もしかして使える?
以下のページによると、さくらの共有サーバでは、suEXECに阻まれるので、iniファイルに設定を書いて、ファイルを読んでパースして、$_SERVERにマージして取り出すようです。
PHP - SAKURAの共有サーバで環境変数を使う - Qiita [キータ]
その他
以下、勝手な想像です。
本当にできるかわかりません。
- 起動時にパスワードを入力させて、メモリ等に保存しておく。
- deamon や KVS に(暗号、復号して)保存してプログラム側から読む
より良い、セキュアな方法ありましたら、教えて下さい!
参考URL
How can I avoid putting the database password in a perl script? - IT Security Stack Exchange