コメント欄の画像認証エラーに気づいたので直しました

いつもブログを読んでくれてありがとうございます。

「コメント欄の画像認証(キャプチャ)が表示されないことがある」という不具合に気づきました。

最近設置した拍手ボタンは押してもらえていたのに、コメントは無かったので、
いま思うと「読んでくれてるのに書き込めなかった」方もいたのかもと反省しています。

何が起きていたのか

原因を調べてみたら、仕組みのすれ違いのようでした。

このブログでは、コメント欄のスパム対策として「SiteGuard WP Plugin」という画像認証機能を使っていました。

ログインした状態だと普通に表示されていたので、この不具合に気づけませんでした。

流れを整理すると、こんな感じだと思われます。

  1. SiteGuardは、誰かがページを開くたびに `/wp-content/siteguard/ランダムな数字.png` というその場限りの認証画像を新しく作るようです
  2. その画像のURLは、表示されたページのHTMLの中に埋め込まれます
  3. ところが、このブログはキャッシュ用プラグイン(WP-Optimize)も使っていました
  4. そのため、次に別の人が同じページを開いたときも、さっき作られたHTMLがそのまま表示されてしまうようです
  5. そのHTMLの中には古い画像のURLが書かれたままですが、肝心の画像ファイル自体はもう存在しません(SiteGuardが一定時間で消したり、別の人がアクセスした時に上書き・削除されたりするためと思われます)
  6. 結果として認証画像の404エラーが起きていたようです

つまり、表示されているHTMLと、実際に存在する画像ファイルがズレてしまっていた、というのが正体でした。

なぜこれが起きやすいのか

「アクセスのたびに動的に作り直される画像」って、ページキャッシュとの相性が悪いようです。

キャッシュは「一度作ったページをそのまま使い回して表示を速くする」ための仕組みですが、画像認証は逆に「毎回新しく作り直す」ことが前提の仕組みです。この二つが同時に動くと、今回みたいに「もう存在しない画像を見てと言い続けるページ」ができあがってしまいます。

どう対応したか

このブログはAkismetというスパム対策プラグインも併用していたので、思い切って画像認証機能自体をオフにしました。

もし今後スパムコメントが増えてきたら、reCAPTCHAなど別の仕組みを検討しようと思っています。

最後に

これまでコメントを送ろうとして送れなかった方がいたら、ごめんなさい。
今は直っているはずなので、もしよかったらまた気軽にコメントしてもらえたら嬉しいです。

気に入ってもらえたら

お読みいただきありがとうございました
共有する

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください