質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2363閲覧

PHP内部で読み込むモジュールへのアクセス拒否の方法

it-bamboo

総合スコア10

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/02/09 07:23

編集2015/02/09 07:39

はじめまして。
こちらのサイトで質問させていただくのは初めてでよくわからないところもあるのですが、お手柔らかにお願い致します。

現在PHPの勉強にとWordPressのソースを読みながら(ところどころパクりながら)簡易的なCMSのようなものを作っています。

WordPressは、index.php=>(require)=>wp-load.php=>(require)=>/wp-includes/wp-*.phpという流れで大量のモジュールを読み込んでいるようなのですが、
もしも悪意のある(?)攻撃者が/wp-includes以下のような他のPHPファイルからrequireされるべきファイルに直接アクセスした場合、定数が未定義だったりして色々と不具合が起こるのではないのかと思います。
(管理ページのモジュールだったりした場合セキュリティ問題になりかねないのでは...?!)

そこで、XAMPPで構築したWordPressの/wp-includes/以下のphpファイルで実験してみると、何も出力しない(真っ白)ものもあれば、Fatal error: Call to undefined functionを吐くものもありました。
それらファイルのソースを見てみても、ただ単に関数を呼び出しただけで、特に対策がされているようには見えませんでした。(少なくとも私のスキルではわからなかった)
WordPressほどのアプリケーションが無対策ということはないと思うのですが・・・

そこで、そういったファイルへのアクセス拒否対策にはどのようなものが考えられるでしょうか?(.htaccessを除く)
もしかしたら特に心配する必要も無いのでしょうか...?
お時間がありましたらご教示願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。
WordPressをまともに使ったことはないのですが・・・
PHPで最近主流になっているフレームワークなどでは、index.phpなどのフロントコントローラに当たるファイル以外は、直接ブラウザからアクセスすることはできない作りになっています。
(ドキュメントルートの外側にPHPを置くイメージです)

「.htaccessを除く」とありますが、maisumakun様もご指摘されている通り、アクセスされる場所にPHPファイルがあるのであれば.htaccessなど、apacheで対応すべきです。

「WordPressほどの・・・」とありますが、どれほど有名であろうと規模が大きくても関係はありません。むしろ大きくなればそれだけセキュリティホールが発生しやすいと考えるべきだと思います。

現実的にはエラーが発生しても、それをブラウザにアウトプットしない設定にされていれば、よほどの事がない限りは何もおきないと思います。
エラーをアウトプットしていると、そこから攻撃者に対して情報を与えることになりますのでpublic環境へupされる際はご注意ください。

投稿2015/02/10 02:06

nasu

総合スコア81

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

it-bamboo

2015/02/11 04:34

御回答ありがとうございます! 最近のCMSはドキュメントルートにフォルダをコピーするだけの簡単設置なので大丈夫なのかと思っていましたが、やはり外側に設置するのが最も安全ですね(笑) エラー表示についてはlocalhost以外のアクセスにおいては、一切表示しないように設定しております。 セキュリティには配慮して制作して参りたと思います。 貴重な情報をいただき、本当にありがとうございました。
guest

0

ベストアンサー

.htaccessを用意するなどして、Webサーバの側で、wp-includesフォルダへの外部からのアクセスを断っておきましょう(参考)。

もちろん、仮にそのまま呼び出したとしても、WordPressやプラグインがきちんとプログラムを組んであれば上の実行例のように

  • (関数やクラスを定義するだけで実行しないので)何も出力しない
  • (WordPress内で定義された関数を呼びだそうとするも、見つからないので)エラーになる

のどちらかになるだけなので、直接的に何か起きることはないとは思いますが、バグが混入していてその前提が崩れる危険もありますし、何より精神衛生上も良くないので、止めておくのが安全です。

(質問編集を受けて)
他のフレームワークでは、フレームワーク側が用意している定数・関数・クラスの存在をファイル冒頭で確認して、適切でなければexitするような実装をしている例があります(CodeIgniterのソース例)。ただ、WordPressの場合、頻繁にバージョンアップが行われることを考えれば、手作業でそのようなチェックを入れて運用することはあまり適当でないと考えます。

投稿2015/02/09 07:44

編集2015/02/09 07:52
maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

it-bamboo

2015/02/11 04:31

御回答ありがとうございます! なるほど、やはり.htaccessで実装するのが最良ですね。 .htaccessの使えないサーバでは追記していただいた方法で対応してみたいと思います。 貴重な情報をいただき、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問