PHPでアプリを作っているといつも、もっといい方があるはずなのだが・・・と思うことがある。
それは、WEBアプリの設定だ。(まあ、要はPHPで作られたアプリの設定だ。)
アプリの設定で、いつも悩む点が以下の点。
もちろん、それぞれを別のことと考えれば、ある程度妥当に解決する方法はあるのだが、
すべてを満たしたいなーと思うとこれが結構難しい。
1)複数のサーバで同じ設定を共有したい。
2)設定にはデータベースなどのパスワードが素で入っているがどうにかならないものか?
3)あるルールに従って、設定を微妙に変えたい。
1)複数のサーバで同じ設定を共有したい。
これは単純な話。同じサービスを複数のサーバで運用しなければならない。
従って、複数のサーバに設定ファイルを配置させ、それらを同期する必要がある。
これはrsyncで解決できる。
2)設定にはデータベースなどのパスワードが素で入っているがどうにかならないものか?
要はセキュリティ情報の取り扱い方法だ。
たとえば、アプリケーションの開発会社にはDBのパスワードは見せたくない。
しかしながら、SSHでログインしてきている。
こんな運用をしているにもかかわらず、セキュリティは大丈夫だといえるのだろうか?
開発会社が、設定ファイルもコピーして持って行ってしまい、
それがファイル共有でばれて・・・個人情報がもっていかれたなんてことを聞いたこともある気がする。
しかし、社内で開発しているわけでもなければ、残念ながらこのような状況は事故にならないまでもよくあり、
そして、それを自分たちでどうにもできそうにないあたりが厳しいところである。
ログをきちんと設計していれば、開発会社がSSHでログインしてくるなんてこともないはずだが、
ログ設計なんてフェーズはたいていのSIerが提案してきたなんて聞いたこともなし、
要求すれば当然、お金になって跳ね返ってくるし、
(実は手離れを考えれば能動的にやってしまっても双方の利益になると思うのだが、
なかなかそうはならないのが、残念なところである。)
そもそも、(意味のある)運用設計が開発設計の前に持ってこれる会社は相当熟練している。
こんな会社ならば、ここでの心配はまずないが、それでも、そういうことがしっかりできるSIerを見つけることすら困難である。
だから、せめてセキュリティの必要性がある情報へのパスワードを素の状態で載せておくことはさけたい。
と考えると、私がよくやるのが、
設定ファイルをプログラム化して、それをバイナリ化(暗号化・難読化)する。
Zend Guardみたいなソリューションだ。
PHP全体をバイナリ化するという用途もあったので、採用したが・・・それ以外ではちょっと気が引ける。
それだけのための出費はちょっと・・・・という理由が1つ。
設定した情報を書き換えるだけでも再度コンパイル(暗号化?)が必要という理由がもう一つ。
設定が書き換えずらいので書き換えないということになればそれはそれでセキュリティの脆弱性の1つですから・・・
3)あるルールに従って、設定を微妙に変えたい。
これも結構あると思う。
たとえば、/foo1/sample と /foo2/sample でfoo1用とfoo2用の設定で異なる部分を作りたい。
しかし、たいていは一緒だし、一緒であることを保証したい。
または、アクセスしてきた端末(PC ? 携帯 ? スマートフォン ? で分けたいとか・・要はUser-Agent)ごとに、多少設定を分けたい。
たとえば、imageリソースのパスとか。それで使う画像を切り替える。
部分的にはhtaccessを使ってディレクトリごとにやることも可能なのだが・・・
mod_rewriteなどを使っても結構柔軟に対応しようと思えばできるのだが、
たいていはプログラミングになる。
しかも、設定ではなく、完全にプログラムの責任範囲にあるとおもわれる部分にプログラミングされてしまう。
そして、このような積み重ねがいつしか、そのサーバでしか動かないというレベルに成長していく・・・・
これをプログラマにさせない方法はないものだろうか・・・・
で結局・・・
このような問題を少しでも改善する方法によりものはないものだろうか・・・・
やはり、プログラマからも隠蔽したいことを考えると、PHPで解決してはいけないわけだし、
DBで管理となれば、DBのパスワードがDBに入っているというのも・・・・
100歩譲って、それでありだとしても、開発段階でその制限があるのもどうなの?めんどくせーって思う。
じゃ、Apacheのレベルで解決できないものだろうか・・・・
とそんなことを考え始めました。
でも、よくありそうな問題でもあるので、何かいいアイデアを持っている方がいたら教えてください。


