SiteGardプラグインの画像認証を入れたらログインできなくなった話

先日SiteGuard WP Pluginを入れたんですが、ログイン画面にreally-simple-captchaという画像認証を導入したところ

Warning: imagepng(……/wp-content/plugins/siteguard/really-simple-captcha/tmp/2017-06-16.png): failed to open stream: Permission denied in ……/wp-content/plugins/siteguard/really-simple-captcha/siteguard-really-simple-captcha.php on line 221

というエラーメッセージがCAPTCHA画像の代わりに出てきて、画像認証が通らずログインできなくなってしまいました。

キャッシュ系プラグインを入れたときに適切な設定をしていないと、CAPTCHAが出てこなくてログインできなくなるということはしばしばあるそうですが、私の場合はキャッシュ系プラグインはまだ入れていません。

しばらく悩んだのですが、原因はファイル名の自動変更機能でした。

//UPした画像のファイル名をY-m-d形式に自動変更する(重複した場合は末尾に番号がつく)
function img_name_convert_date($filename) {
    $path_info = pathinfo($filename);
    $ext  = empty($path_info['extension']) ? '' : '.' . $path_info['extension'];
    if( $path_info['extension'] == ('png' || 'gif' || 'jpg' || 'jpeg' || 'bmp' || 'webp' || 'ico')){
        $filename = strtolower(date('Y-m-d').$ext);
    }
    return $filename;
}
add_filter('sanitize_file_name', 'img_name_convert_date', 10);

というコードをテーマのfunction.phpに追記しているのですが、これがUPされた全画像に適用されることでCAPTHCA認証用の画像の名前まで変わってしまい、画像が見つからずにエラーが出ているという落ちでした。

これは自作コードなので全く同じのを使ってる人はいないと思いますが、MD5に変換するコードは調べたときに出てきました(そして参考にしました)し、そういうプラグインもあるそうなので同じ症状が出る人もいるかもしれません。改名系プラグインがきちんと回避処理を行っているかは調べてないのでわかりませんが、一応そっちも疑ってみていいでしょう。

画像認証機能が動かないけどキャッシュは使ってないorきちんと回避した、って人はファイル名の自動変更系も疑ってください。FTPでアクセスして該当コードを/*……*/でコメントアウトしたり、プラグインフォルダを動かすなりして無効化してやればログインできるようになります。

多分ちゃんといじればメディアフォルダに対する画像だけを対象とかにできるんでしょうけど、面倒くさいしいい機会なのでSiteGardの画像認証は廃止し、かわりにreCAPTCHAを導入することにしました。また他のところでエラーが出る可能性もあるのでまぁそのうち変えます。そのうち……。

もともとSiteGardとかに搭載されてるのはreally-simple-captchaの名の通り”非常にシンプル”な簡易版で防御力も弱いですからね。

『SiteGardプラグインの画像認証を入れたらログインできなくなった話』へのコメント

  1. 名前:Wordpressでrecaptcha画像が表示されない時の治し方 | シゴクリ 投稿日:2018/08/17(金) 00:33:59 ID:e287bfd45 返信

    […] SiteGardプラグインの画像認証を入れたらログインできなくなった話 […]