ページキャッシュとSiteGuard WP Pluginでコメントの画像認証に不具合

気が付かなかった不具合

WordPressでコメント欄を設置する場合、スパムコメント対策として画像認証を導入しておくべきです。

僕のサイトでは『SiteGuard WP Plugin』というプラグインを使って、画像認証機能をコメント欄に設置していました。

その効果があってか、今までスパムが一度も来ていませんでした。

しかしある日、コメントが投稿できないというメールを頂きました。

そして気が付きました。
スパムどころか、コメントそのものが来ていないということに。

そこで記事をブラウザで見てみました。

wordpress コメント 画像認証

なんと、画像が表示されていませんでした。

これでは、コメントの投稿ができないですね。

原因

『SiteGuard WP Plugin』は画像認証の画像を内部で作成して、そのurlをimgタグのsrc属性として出力しています。

このことは、問題はありません。

問題なのがページのキャッシュでした。

ページキャッシュとは、WordPressが作成したhtmlデータを保存しておき、ブラウザから再度表示要求がきたら、htmlデータを再生成せずに保存していたデータをそのまま送り返す機能です。

全く同じデータを何度も作成するのは非効率なので、この機能はとても役に立ちます。

しかし今回は、これが問題となります。

通常、ブラウザでページの読み込みが行われるとhtmlデータ作成が行われ、それと同時に『SiteGuard WP Plugin』が認証画像を生成しています。
しかし同じページを2回以上読み込もうとすると、サーバーにページキャッシュがあるため、そのデータがブラウザに送られます。

そして一定時間が経過すると、『SiteGuard WP Plugin』が作成した画像がサーバー内から削除されます。
その後ブラウザでページを表示すると、ページキャッシュのデータが送られてきます。

しかしimgタグで指定されている画像が削除されているため、認証画像が空白となってしまうのです。

対処法

今回僕は、『LiteSpeed Cache』というキャッシュプラグインを使用しています。
これはmixhostなどのLiteSpeedサーバー専用のキャッシュです。

このキャッシュの設定をうまく調整すれば、今回の問題に対象できる可能性があります。

しかし今回は、『LiteSpeed Cache』プラグインを停止することにしました。
ひと月1万程度のアクセス数しかないので、キャッシュの恩恵がほとんどないのが現状だからです。

もっとアクセス数が増えたら、何らかの対策を考えようと思います。