こんにちは。ワラゴンです。
みなさん、wordpress のセキュリティ対策は大丈夫でしょうか?
この記事を読んでいる人は、きっとエンジニアさんか、ブログ初心者の方が多いのではないかと思います。
ブログ初心者の方の場合は、wordpressを立ち上げて記事を書くことだけで精いっぱいと思うので、wordpressのセキュリティなんて、あまり関心がないところかもしれません。
まあ、アクセスが少ないうちは仕方がないかもしれませんが、サイトが大きくなってきたなら必ず一度はwordpressのセキュリティに関して振り返ってみたほうが良いと思います。
一方、Web制作会社のエンジニアさんなら、wordpress のセキュリティ問題はみなさんいつも注意を払っているところなのではないでしょうか?
今日は、プロのエンジニアでもやってしまう可能性がある、wp-config.php のうっかり脆弱性を紹介したいと思います。
wp-config.php をどうやってバックアップしていますか?
wordpress のカスタマイズでは、たまにwp-config.php に手を加えなければならない時があります。
そんな時、みなさんはどうやってバックアップを取っていますか?
個人ブロガーさんなら、ローカルにバックアップを取っているかもしれないですね。
しかし、多くの制作会社さんでやってしまいがちなのは、
サーバー上にバックアップを置いておく
です。
ギクッと思った人、いますね。
特に、規模の小さめな制作会社さんだと、こういうことをする人って結構いると思います。
仮にgitで管理していたとしても、wp-config.phpはバージョン管理の対象外になっていることの方が多いと思うので、やっぱりサーバ上にバックアップを残しておく文化って、そう簡単に潰せないのが現実かもしれません。
どんな名前で残す?
さて、百歩譲ってサーバ上にバックアップを残すのをOKとしたとき、どんな名前で残しましょう?
①wp-config_.php
②wp-config.php_
あなたなら上のどちらを選ぶでしょうか?
初心者ブロガーさんはなら「どっちでもいいんじゃないの?」と思うかもしれません。
制作会社でphpを触っている人なら、「②の方がいい」という人もいるのではないでしょうか。
なぜなら、拡張子が.phpではなくなることで、phpが実行されずに済むためです。
phpが実行されなければ、何かの誤作動を起こすこともないので、安全ですね。
うんうん。
と思った人、アウトです(私も昔は一瞬アウトの時期がありました)。
知らないうちに全世界に大公開
やってみれば分かりますが、wp-config.php_にアクセスすると、以下のようになります。
そうや、そうやった、、、
と思った人もいるかもしれません。
そうなんです。
少なくともapacheは、未知の拡張子は全てテキスト形式とみなして処理する設定になっています。
なので、.php_という未知の拡張子のファイルは、テキストファイルだと思ってその中身をそのままブラウザに渡してしまうんですね。
一方、①の wp-config_.php とした場合、これにアクセスしても画面には何も表示されません。
phpとして実行された結果、「何も表示しない」という結果を得ているためです。
このように、「phpとして処理されない方が良い」という考え方が、かえってDB情報を丸出しにするという無残な結果に終わってしまうことがあります。
それってどのくらい危険なの?
全世界に公開しているとは言っても、実際問題、どのくらい深刻なんでしょうか?
言うまでもなく、バックアップしたファイル名を知らなければ、アクセスすることもできません。
そう考えると、どこかからリンクが貼られているわけでもないので、言うほど深刻ではないかもしれません。
しかし、攻撃者からしてみれば、無数にあるURLリストに対してwp-config.php-, wp-config.php_, wp-config.phpxあたりで機械的にアクセスしてみて、1,000サイトのうちひとつくらいヒットしたらラッキーくらいのものですから、それがあなたのサイトだったらあなたにとってはアンラッキーです。
しかしまあ、それでもDBの接続情報が分かったところで、通常DBサーバへのアクセスはIPアドレスによって制限されています。
なので、DB情報公開が即ハッキングにつながるかといえばそうでもなさそうなので、やっぱりあまり深刻ではないという意見もあるかもしれません。
そうはいっても、DBへのアクセス情報を世間にさらすなんて、私が発注する側だったら激おこなわけですが(どっちだよ!)。
まとめ
いかがでしたでしょうか?
やっべ、俺やってたわ・・・・
なんて制作会社のエンジニアさんやフリーランスの方もいるのではないでしょうか。
まとめると以下のようになります。
・基本的にはサーバ上にバックアップファイルを置かない(バージョン管理ソフトを使う)
・サーバ上に置く場合でも、wp-config.php のようなコンフィグファイルは拡張子を.phpのままして名前を変更する
・そのほかのファイルをバックアップしたい場合も、ソースを晒すのがいやなら拡張子は変更しない
この手の失敗は wordpress に限らず、一般的なPHPのショッピングサイトやフレームワークでも十分に起こり得ますので、みなさんチーム開発するときはメンバによく注意喚起するようにしましょう。
補足
ちなみに、世間で言われているような「wp-config.phpのパーミッションは400にせよ!」を実施している場合はどうでしょう?
この場合、バックアップを取る時にサーバ上で直接ファイル名の変更を行っていれば、ブラウザからの読み取りも禁止されるのでセーフとなります。
ごちゃごちゃ書いてきましたが、個人的な感覚としては、100人に1人くらいはやっちまっている人がいそうな気がします。どうなんでしょう?