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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

解決済

2回答

2067閲覧

WordPressでPHPファイルが外部から丸見えな件

moomoom

総合スコア19

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

0グッド

0クリップ

投稿2020/03/29 23:14

編集2020/03/29 23:25

###前提
WordPressのセキュリティを調べていたらこちらのページを拝読しまして

すべて公開ディレクトリにあるのでPHPファイルが読まれてしまう

ということを知り驚きました。

フロントから受け取った値をバリデーションしていたのですが、その方法が丸見えだったのか!と…

###理解したこと
さっそく自分のサイトで以下試したら、ばっちり丸見えでした。
http://example.com/wp-content/plugins/plugin_name/readme.txt

ところが以下は「You die!」と表示されました。
http://example.com/wp-content/plugins/plugin_name/init.php

このファイルを見てみますと先頭に以下がありました。
defined('ABSPATH') or die('You die!');

ここで、全てのPHPファイルにはこのdefined()の処理での対策が必要で、なければ丸見えなのだと理解しました。

###質問
前置きが長くすみません。
質問は1、2、3です。

1.
以下にアクセスすると「500エラー」(このページは動作していません)でした。
http://example.com/wp-content/themes/my_theme_name/lib/cf.php

このファイルは自分が書いたものなので、先のdefined()の処理などの対策がありませんが、なぜ丸見えにならず「500エラー」になるのでしょうか。

2.
以下にアクセスすると「真っ白」でした。
http://example.com/wp-content/themes/my_theme_name/lib/valid.php

これも自分が書いたもので特に対策はしていないのですが、なぜ「500エラー」だったり「真っ白」だったりするのでしょうか?

尚、「真っ白」とは以下HTMLです。

<html><head></head><body cz-shortcut-listen="true"></body></html>

3.
「500エラー」や「真っ白」のものたちは、このままでも平気でしょうか?
それとも自分で書いたPHPファイルは、子テーマのsingle-custom.phpなども含めて全てdefined()の処理を先頭に書いた方がよろしいでしょうか?

セキュリティ関係にお詳しい方からのご回答お待ちしております。
宜しくお願い致します。

###追記
「500エラー」になったcf.phpと、「真っ白」になったvalid.phpは以下の内容です。

cf.php
カスタムフィールド関係の自作関数が並んでいるファイルで、他にはadd_action()というWordPressの独自関数もあります。

valid.php
フロントから受け取った値をバリデーションする自作関数が並んでいるだけのファイルです。

これらの自作関数は全てfunction my_xxx(){}という書き方です。

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

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

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

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

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

maisumakun

2020/03/29 23:15

それぞれのPHPファイルのコードはどのようなものでしょうか?
ockeghem

2020/03/29 23:20

「すべて公開ディレクトリにあるのでPHPファイルが読まれてしまう」とする記事のURLを教えて下さい
Zuishin

2020/03/29 23:25 編集

ばっちり丸見えなのは PHP ではなく readme.txt ですね。defined ではなく、拡張子の問題です。
moomoom

2020/03/29 23:25

maisumakun様、質問文末に「追記」として概要を加筆いたしました。
moomoom

2020/03/29 23:26

ockeghem様、質問文の「前提」の「こちらのページ」にリンクを貼りました。
moomoom

2020/03/29 23:30

Zuishin様、ありがとうございます。PHPファイルは丸見えになったりしないのですね。そうしますとdefined()にはどんな意味が?「You die!などのメッセージを表示したいときに必要」という程度でしょうか?あと「500エラー」と「真っ白」の違いも気になります。
Zuishin

2020/03/29 23:44 編集

500 は実行時エラーです。直接実行すべきでないものが実行されているために起こるものです。真っ白は実行した結果エラーは無かったけど出力が無いということです。どちらも想定外の実行によって起こるものです。 ここに書かれている 「defined('ABSPATH') or die('You die!');」は、ワードプレスを通さず実行された場合に実行を中止しろという一連の命令で、これを入れると You die! が表示されると思います。 エラーメッセージにはクラッキングに役立つ情報が含まれている可能性があり、それを消すため、または想定外の副作用でサイトやサーバーにダメージを与えないように入れます。
moomoom

2020/03/29 23:43 編集

エラーメッセージというのは外部から読まれてしまうのですか?!それも知りませんでした。error_logやPHPのエラーで表示されるものですよね?maisumakun様がご回答でdefined()を入れるべきと仰ったのはそういった意味もあったわけですね。なるほどなるほど。
guest

回答2

0

参照記事のURLありがとうございます。その記事をざっと読みましたが、

全てのファイルが公開ディレクトリに置かれる

とは書いてありますが、だから「PHPファイルが読まれてしまう」とは書いてありません。
現実問題、PHPスクリプトは通常公開ファイルに置くものなので、その状態でPHPソースが読まれたら困るでしょう。現実に読めるのは、「PHPの実行結果」であり、「PHPのソースコード」ではありません。それは、お試しになったとおりですし、簡単なスクリプトを書いてみて実験してもわかるでしょう。

このテーマについては、以前ブログ記事を書いたことがあります。

WordPressの侵入対策は脆弱性管理とパスワード管理を中心に考えよう

参照された記事はWordPressの「悪口」を書いたものですので、欠点を並べ立てているのは当然のことです。一方で、WordPressはホワイトハウスを始め世界中でもっとも多く使われているCMSです。長所も短所もあるソフトウェアですから自分の用途に適していれば使えば良いとおもいますが、少なくともこれだけ使われているソフトウェアが「ソースコードが丸見え」ということは常識的にありえないでしょう。元記事もソースコードが丸見えとは書いていません。勝手読みをしないようにしましょう。

投稿2020/03/29 23:42

ockeghem

総合スコア11705

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

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

moomoom

2020/03/29 23:50

まったくockeghem様のご指摘の通りで、引用元記事の筆者様には大変申し訳ないことをしてしまいました。 >「PHPの実行結果」であり なるほど、とてもわかりやすいご説明ありがとうございます。ブログもありがとうございます(誤読のないよう注意します…)
guest

0

ベストアンサー

カスタムフィールド関係の自作関数が並んでいるファイルで、他にはadd_action()というWordPressの独自関数もあります。

WordPressと関係ない実行からadd_action()を呼び出そうとして、エラーとなっているものと思われます。

フロントから受け取った値をバリデーションする自作関数が並んでいるだけのファイルです。

関数定義が並んでいるだけであれば、何も出力しません。

「500エラー」や「真っ白」のものたちは、このままでも平気でしょうか?

それとも自分で書いたPHPファイルは、子テーマのsingle-custom.phpなども含めて全てdefined()の処理を先頭に書いた方がよろしいでしょうか?

念のためにdefined()チェックを入れておいたほうがいいとは思います(フレームワークによっては、殆どのファイルを後者のような「関数やクラスの定義だけ」にすることでチェックを行わないこともあります)。

投稿2020/03/29 23:28

maisumakun

総合スコア146018

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

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

moomoom

2020/03/29 23:39

なるほど。どうもありがとうございます。チェックを入れるように致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問