• ベストアンサー

phpファイルについて

phpファイル(xxx.php)の<?php ?>で囲われた部分は、外部から読み取られる事は絶対に出来ないのでしょうか? データベースなどの設定(HOST名、データベース名、データベースパスワード)をドキュメントルート内のphpファイルのデータベースクラスに直接記述しています。 これって安全ですか? 一部の参考書等では、重要な設定等は、ドキュメントルートの外にファイルを置いておいて、インクルードする方法が書かれています。 phpファイル(xxx.php)の<?php ?>で囲われた部分が、絶対に外部から読み取られないのであれば、現状のまま運用しようと思っていますが、ご教授下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • racchoman
  • ベストアンサー率71% (20/28)
回答No.3

ソースコードが見えてしまうケースは、以下のようなものが考えられます。 1.Webサーバの設定ミス  設定変更時などにミスをすることはあります。 2.バックアップファイル  foo.php~ や foo.php.bak などをアップしてしまう。 3.Webサーバの脆弱性  昔、ApacheなどでJSPのソースコードが見えてしまう脆弱性が  何度か発見されました(PHPの事例は知りませんが)。 用心のためにドキュメントルート外に置くのは、良い習慣だと思います。運用ミスや脆弱性などがあると、ドキュメントルート外に置いても絶対安全とは言えませんけれども、外に置いた方が危険性は少ないと思います。 >データベースなどの設定(HOST名、データベース名、データベースパスワード)をドキュメントルート内のphpファイルのデータベースクラスに直接記述しています。 ソースコードが外から見えるか、という問題とは別に、このようなことは余りよろしくないと思います。 まず、データベースクラスをドキュメントルート内に置く必要は無いですよね。また、データベースクラスに直接設定を記述すると、本番環境と開発環境のプログラムが別になり、保守が面倒になります。面倒というのは、ミスしやすいということです。従って、設定情報は設定ファイルなどに記述した方がよいでしょう。そうすると、本番環境と開発環境の違いを、設定ファイルに封じ込めることができます。

yoshi_t
質問者

お礼

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

その他の回答 (4)

  • noro6677
  • ベストアンサー率21% (34/158)
回答No.5

>少なくとも、root権限でしか読み取れない場所に設定情報を退避しておけば、 >このケースでは、設定情報が読み取られることはなかったはずです。 その場合Webサーバでphpを実行するユーザが読みにいけません。

yoshi_t
質問者

お礼

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

  • golive001
  • ベストアンサー率54% (20/37)
回答No.4

ソースコードをコンパイルしておくことで 人間にはほぼ解析不可能にすることはできると思います。 例えばこんな商品もあります。 http://www.asial.co.jp/ioncube/ PHPはインタープリンタ型言語ですから 随時、コードをインタープリンタが解析、実行ファイル化、実行 を繰り返すわけですが、 コンパイル済みのファイルですと、逆アセンブル等をかけなければ ソースコードの実行内容を把握されません。 ご参考までに。

yoshi_t
質問者

お礼

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

  • x2501
  • ベストアンサー率57% (4/7)
回答No.2

PHPファイルがリクエストされるたびに実行し、その結果のみを返すのでPHPがインストールされているサーバであれば読み取られることはありません。 ですが万が一のことを考えるとドキュメントルート外に置いた方がより安全ですね。 絶対とは言い切れませんが、基本的に<?php~?>内に書いても問題ないです。

yoshi_t
質問者

お礼

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

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.1

私はPHPの言語仕様について詳しくないので、 <?php ?>の中身が外部から読み取れるかどうかについてはお答えできません。 ただ、もし私が「安全かどうか」と聞かれたら、「安全ではない」と答えるでしょう。 例えば、サーバの設定ミスなどで、一般ユーザからPHPファイルのあるディレクトリにアクセスし、 PHPファイルそのものを取得できてしまったらどうでしょうか? もちろん、これはサーバ管理上の問題であり、プログラマにはどうしようもないかもしれません。 しかし、PHPファイルに設定情報をベタ書きしていたプログラマに問題はない、 と言い切れるでしょうか? 少なくとも、root権限でしか読み取れない場所に設定情報を退避しておけば、 このケースでは、設定情報が読み取られることはなかったはずです。 プログラマの過失によりセキュリティレベルを1段階下げてしまったことになります。 しかも質問者さんは、その退避方法をご存知なようですので、そうなると、 「プログラマの怠慢だ」と言われても仕方ないかもしれません。 できる限り、より安全な方法を取る方がいいでしょう。 とまあ、偉そうに書いてしまいました。 「そう言うお前はどうなんだ?」と聞かれたら、返答に困ってしまいますが・・・ セキュリティなどは十二分に対策しておいた方がいいはずです。 自分の思いもしなかった所に弱点は潜んでいるものですし。 できる限り品質のよいものを作れた方が良いと思いませんか?

yoshi_t
質問者

お礼

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