電子書籍の厳選無料作品が豊富!

phpファイル(xxx.php)の<?php ?>で囲われた部分は、外部から読み取られる事は絶対に出来ないのでしょうか?

データベースなどの設定(HOST名、データベース名、データベースパスワード)をドキュメントルート内のphpファイルのデータベースクラスに直接記述しています。
これって安全ですか?

一部の参考書等では、重要な設定等は、ドキュメントルートの外にファイルを置いておいて、インクルードする方法が書かれています。

phpファイル(xxx.php)の<?php ?>で囲われた部分が、絶対に外部から読み取られないのであれば、現状のまま運用しようと思っていますが、ご教授下さい。

A 回答 (5件)

ソースコードが見えてしまうケースは、以下のようなものが考えられます。



1.Webサーバの設定ミス
 設定変更時などにミスをすることはあります。
2.バックアップファイル
 foo.php~ や foo.php.bak などをアップしてしまう。
3.Webサーバの脆弱性
 昔、ApacheなどでJSPのソースコードが見えてしまう脆弱性が
 何度か発見されました(PHPの事例は知りませんが)。

用心のためにドキュメントルート外に置くのは、良い習慣だと思います。運用ミスや脆弱性などがあると、ドキュメントルート外に置いても絶対安全とは言えませんけれども、外に置いた方が危険性は少ないと思います。

>データベースなどの設定(HOST名、データベース名、データベースパスワード)をドキュメントルート内のphpファイルのデータベースクラスに直接記述しています。

ソースコードが外から見えるか、という問題とは別に、このようなことは余りよろしくないと思います。

まず、データベースクラスをドキュメントルート内に置く必要は無いですよね。また、データベースクラスに直接設定を記述すると、本番環境と開発環境のプログラムが別になり、保守が面倒になります。面倒というのは、ミスしやすいということです。従って、設定情報は設定ファイルなどに記述した方がよいでしょう。そうすると、本番環境と開発環境の違いを、設定ファイルに封じ込めることができます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
具体的な例をあげて頂いたので、とても参考になりました。
絶対ではないという事がよく分かりました。
環境等による影響を受けてしまう可能性がある以上、やはりプログラム側で出来る対策は打っておくべきですね。
ありがとうございました。

お礼日時:2007/04/03 00:24

>少なくとも、root権限でしか読み取れない場所に設定情報を退避しておけば、


>このケースでは、設定情報が読み取られることはなかったはずです。
その場合Webサーバでphpを実行するユーザが読みにいけません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/03 00:08

ソースコードをコンパイルしておくことで


人間にはほぼ解析不可能にすることはできると思います。

例えばこんな商品もあります。
http://www.asial.co.jp/ioncube/

PHPはインタープリンタ型言語ですから
随時、コードをインタープリンタが解析、実行ファイル化、実行
を繰り返すわけですが、
コンパイル済みのファイルですと、逆アセンブル等をかけなければ
ソースコードの実行内容を把握されません。

ご参考までに。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
PHPにこんな方法があったのですね、初めて知りました。
javaの.classファイルみたいな感じでしょうか
教えて頂いたサイトを見させて頂きました。
ライセンスが結構高いのが残念ですね。
その内フリーで提供されないでしょうか・・・
参考になりましたありがとうございます。

お礼日時:2007/04/03 00:17

PHPファイルがリクエストされるたびに実行し、その結果のみを返すのでPHPがインストールされているサーバであれば読み取られることはありません。


ですが万が一のことを考えるとドキュメントルート外に置いた方がより安全ですね。

絶対とは言い切れませんが、基本的に<?php~?>内に書いても問題ないです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
経験者の方の、お話を聞けてひとまず安心です。
環境等における影響を除いて、PHP言語だけを注目した場合、基本的に<?php ?>内は読み取られる可能性が低い事が分かりました。
ただ、万が一があるという事も・・・
確かにどのプログラミング言語そのものにも、脆弱性があり絶対という事は、まず無いと考えるのが無難なのでしょう。
やはり、総てを理解出来なくても、知りうる対策はこうじるべきなのですね。
ありがとうございました。

お礼日時:2007/04/03 00:44

私はPHPの言語仕様について詳しくないので、


<?php ?>の中身が外部から読み取れるかどうかについてはお答えできません。

ただ、もし私が「安全かどうか」と聞かれたら、「安全ではない」と答えるでしょう。

例えば、サーバの設定ミスなどで、一般ユーザからPHPファイルのあるディレクトリにアクセスし、
PHPファイルそのものを取得できてしまったらどうでしょうか?
もちろん、これはサーバ管理上の問題であり、プログラマにはどうしようもないかもしれません。
しかし、PHPファイルに設定情報をベタ書きしていたプログラマに問題はない、
と言い切れるでしょうか?
少なくとも、root権限でしか読み取れない場所に設定情報を退避しておけば、
このケースでは、設定情報が読み取られることはなかったはずです。
プログラマの過失によりセキュリティレベルを1段階下げてしまったことになります。
しかも質問者さんは、その退避方法をご存知なようですので、そうなると、
「プログラマの怠慢だ」と言われても仕方ないかもしれません。
できる限り、より安全な方法を取る方がいいでしょう。


とまあ、偉そうに書いてしまいました。
「そう言うお前はどうなんだ?」と聞かれたら、返答に困ってしまいますが・・・
セキュリティなどは十二分に対策しておいた方がいいはずです。
自分の思いもしなかった所に弱点は潜んでいるものですし。
できる限り品質のよいものを作れた方が良いと思いませんか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
おっしゃる通りだと思います。
プログラマとして出来る限りのセキュリティ対策をしておくべきだと思います。
ただ、本質を知らずに参考書通りの対策をこうじたとしても、それは根本的なセキュリティ対策といえない事から、今回の質問をさせて頂きました。
私なりに考えられる手段で、ドキュメントルート上のPHPファイルを読み取ろうとしたのですが、出来ませんでした。
参考書では読み取られる可能性を示唆しているような事が書かれていたので、実際にそのような方法があるのか、今後のセキュリティ対策を考える面で知っておきたかったのです。
もしご存知の方がいらっしゃるようでしたら、読み取り方法は書かなくて結構ですので、読み取れるか、読み取れないかだけでも教えて頂けると助かります。

お礼日時:2007/04/01 23:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!