人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Webサービスを作成しています。言語はPHPです。
データベースにアクセスするために、どこかにユーザーIDとパスワードを保持させる必要があります。
その際、どのように保持させるのが一般的なのでしょうか。

プログラムに直接ハードコーディングするのはセキュリティ面でよくないかと思います。
しかし、iniファイルなどに書いたところで、そのiniファイルを読み取られればパスが漏れてしまいます。

セキュリティ上安全にユーザーIDとパスワードを保持させるにはどのようにすればよいでしょうか。

●質問者: Gaasu
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● じゅぴたー
●50ポイント

Webサーバ経由でアクセスできないフォルダに、Webサーバ経由でアクセスできないファイル名で保存し、PHPスクリプトからincludeするのが無難です。


たとえば、Apacheでは "user/public_html/" が公開フォルダであることが多いのですが、"user/var" のようなフォルダに保存することです。

また、Apacheでは "."(ドット) で始まるファイル名は公開されないので、".opqrstu" のような意味不明のファイル名にしておくといいでしょう。

◎質問者からの返答

回答ありがとうございます。


2 ● munyaX
●50ポイント ベストアンサー

Webサーバ等からDBサーバへ接続する前提ですが、

よく見かけるのは

・PHP上で定数、または変数として管理

・独自の設定ファイル(XML,YAML,ini,JSON,CSVなど)に記述

でしょうか。

DBへ接続するためのパスワード自体に特別な暗号化(復号化)等を行っている

サービスは目にしたことがないです。

#よく利用されているフレームワークCakePHP、symfonyや、言語は違いますが

#Ruby on Railsなども、いずれかの方法で実装されています。



理由としては、

・Webサーバなどアプリ側からDBへ接続し情報を取得する際、

一連の動作を素早く行う必要があり、余計な処理を極力省きたい。

・DB側で例えばiptables、hosts.allow|denyなどを利用し、接続元サーバを

絞っていれば、セキュリティはある程度担保される。

といったものがあげられます。


一番知られてはいけないのは外部の一般ユーザーですから、そこが防げれば

原則大丈夫だというサービスが大部分を占めているのではと思います。

※仮に知られたとしても、普通はDBサーバでアクセス制限をかけますから、

知ったところでアプリサーバ自体のアカウントをクラックされない限りは

使えないですが。



あとはどれだけセキュリティを気にするか、コストとのトレードオフになります。

(コスト=毎回の処理コスト、実装時の開発コスト)

・一般的なDB、例えばMySQLやOracleをそのままで利用する場合、

パスワードを暗号化しても、必ず復号化する必要がありますので

その処理コスト

※そもそも復号化が前提なのでプログラムが読める人なら

解読されるのは時間の問題。

・外部のサーバに保存し、接続の度に毎回問合せて取得する場合も、

処理時間や全体的な開発工数が上がります。

※この方法はそもそも通信を行って取得することで

別のリスクが発生する。


時々、Webサーバの設定を失敗してソースコードが丸見えになってしまうような

ことは起こりえますので、ドキュメントルート下のファイルにはPHPのファイルで

あっても書かないのが良いのは確かです。

※数年前にmixiでこの現象が起こって話題になってましたね。


暗号化(復号化)も、XORのような単純なものであれば対して負荷にもならないで、

気になるようならかけても良いかもしれません。

http://itpro.nikkeibp.co.jp/article/COLUMN/20060131/228211/


参考程度に。

◎質問者からの返答

回答ありがとうございます。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ