はじめに
このネタは、本ブログを立ち上げた時にもハマった気もするのですが、特に理由はわからずに放置していました。最近、訳あって、他のWebsiteを構築したのですが、ここでも同じ様にはまり、およそ原因が分かったので、記録しておきます。
WP-Statelessを入れると全てのメディアがクラウド上に
今回は、以下の順序でサイトの構築を行いました。
- VMの構築
- WordPress on Bitnamiの導入
- WordPressのセキュリティ系プラグインの導入
- WP-Statelessの導入
構築の順序は色々あると思うのですが、私としてはある程度のセキュリティを固めた上で、初めてインターネットに公開したいと思っていたので、プラグイン導入後のWP-Statelessの導入という運びになりました。
3.のセキュリティプラグインの中で、SITEGUARDがあり、これの機能を使って管理画面のログインスクリーンなどでCAPTCHAを利用することができる様になります。
CAPTCHAは簡単に説明すると、Botなどによる攻撃を防ぐ手段として、相手が人間であることを確かめるための仕組みです。例えば、9枚のタイル状の絵が表示されて、その中から指示に合致するものを選んだり、画面に表示されているアルファベットや数字を入力するといったやつです。
人間だと当たり前に選び出せるものも、プログラムで実現しようと思うとなかなか難しいので、パスワード認証に加えて、CAPTCHAによる認証を加えることで、サイトが誰かに乗っ取られるリスクを減らすことができます。
このCAPTCHAですが、いずれにしても画像を表示させる必要があります。
一方で、WP-STATELESSですが、これはサーバーが配信するメディア(例えば、画像とか、動画とか)の保存場所をVM状ではなく、クラウドストレージ上にし、クラウドストレージからサイトを参照している人に直接データを配信するためのPluginで、それ自体で、VMのストレージリソースを節約できたり、動画配信とかの場合は、CPUやメモリなどを浪費を防ぐことができます。
この仕組みって、とても素晴らしいもので、クラウドリソースの使い方としては理想的だと思うのですが、必ずしも、全ての人が実装できる仕組みだとは思いません。そう考えた場合、その他のPluginの前提としては、その辺りは実装されておらず、全てのメディアは、VMのローカルで処理されている前提でサービスが提供されていると考えるのが合理的であり、SITEGUARDのCAPTCHA用の画像もそうだろうと考えるのが妥当かと思います。
ソースを追ったりとか、セッションを追ったりとかそんなことはしていませんが、この仮説はおそらく正しいと思います。CAPTCHA画面の画像が表示されないということは、URLに記載されているアンカータグの場所に画像がないことを意味しており、それはなぜかというと、メディアファイルは須くWP-STATELESSの機能により、クラウドストレージを参照する様になっているからです。
回避方法は良くわかりませんが、きっと調べれば出てくると思います。ただ、そこまでの熱意は今のところないので、別の要素で認証することで、サイトのセキュリティを担保することにしました。
管理画面にログインできなくなったら
ちなみに、管理画面にログインできなくなったら、やることは一つで、WordpressのPluginフォルダ内にあるSITEGUARDフォルダをリネームすればおしまいです。これをすることで、Wordpressサーバーから見るとSITEGUARDはDeactivateされた状態になり、CAPTCHAもオフになるので、通常のローカル認証だけでログインすることができる様になります。
まとめ
- SITEGUARDで実現しているCAPTCHA画像が壊れてしまう現象とその原因に関してメモしました。
- 根本的な解消方法は調べていませんが、この事象を発生させてしまった場合は、慌てずに、VMのコンソールでVMへログインし、wordpressのpluginフォルダでSITEGUARDのフォルダをリネームしましょう