こんにちは。
エンジニアの松村です。
平成最後のブログとなりました。
目立った予定も特に無いまま、10連休を迎えようとしています。
連休中に備え、事務所の観葉植物に自動給水器をセットしたのですが、正しく機能してくれるのか結構不安です。
さて、今回のブログです。
WordPressサイトで、管理画面の手前(wp-admin)にBasic認証を設定した場合に、サイト内でも認証画面が表示されてしまうといった問題がありました。
その発生条件と解決方法についてご説明させていただきます。
それでは早速参りましょう。
Table of contents
発生条件
調べてみたところ、この問題は以下の条件で発生するようです。
- /wp-admin にBasic認証をかけている
- ビジュアルエディタに自サイト(トップ・アーカイブを除く)のURLを貼り付けている
この条件が揃った時に、ビジュアルエディタで作成したページを表示すると、Basic認証が表示されます。
原因について
原因はWordPressのoEmbed機能でした。
バージョン4.4から標準搭載されている機能で、ビジュアルエディタ内にoEmbedに対応したURLを貼り付けると埋め込み表示に変換されます。
※変換前
※変換後(URL貼り付けるとこの様に変換されます)
URLから自動生成される埋め込みには、タイトル・本文・サイト名などが表示されます。
そして、サイト名の左にあるWordPressのロゴマーク。
この画像のパスを見ると「/wp-admin/images/w-logo-blue.png」となっており、wp-admin以下にあるロゴマークを読み込む事になります。
そのため、wp-adminにBasic認証をかけており、oEmbed機能を利用したページを表示する際にBasic認証が表示されるのです。
※oEmbed機能の無効化について
oEmbed機能自体、テーマのfunctions.phpに以下のコード追加で無効に出来ると言われています。
remove_action('wp_head','rest_output_link_wp_head'); remove_action('wp_head','wp_oembed_add_discovery_links'); remove_action('wp_head','wp_oembed_add_host_js');
しかし、サイトでの表示上は無効化されるものの、検証ツールのネットワークパネルを見るとしっかりロゴを読み込もうとしている事がわかります。
※Basic認証の影響で画像が読み込めず、 pending(保留)状態
これにより無効化設定をしていても、Basic認証が表示されるパターンが発生しています。
解決方法
解決方法は2つあります。
状況に応じてお好みでお選びください。
プラグインで対応する
Disable Embedsというプラグインにより、機能を完全に無効化できます。
特に設定も必要無く、インストール後に有効化するだけです。
管理画面 > プラグイン新規追加画面から「Disable Embeds」で検索か、下記リンクよりダウンロードいただけます。
.htaccessで対応する
プラグイン導入に抵抗のある方は.htaccessでの対応をおすすめします。
.htaccessに以下の記述を追加するだけです。
<Files w-logo-blue.png> Satisfy any allow from all </Files>
これにより、w-logo-blue.pngに対するBasic認証を解除する事が出来ます。
おわりに
何故この階層にロゴ画像が置かれてるのかというのはさておき、セキュリティの為にwp-adminにBasic認証をかけているケースは少なくないと思います。
oEmbedのために認証を外すわけにはいかないので、その対策をご紹介させていただきました。
放っておくとユーザビリティを損なう事になるので、いずれかの対策をおすすめします。
それでは今回は以上となります。
最後までご覧いただきありがとうございました。